├── .gitattributes
├── .gitignore
├── LICENSE
├── README.md
└── game
├── gui.rpy
├── gui.rpyc
├── 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
├── options.rpy
├── options.rpyc
├── python-packages
└── chatgpt
│ └── __init__.py
├── screens.rpy
├── screens.rpyc
├── script.rpy
├── script.rpyc
└── tl
└── None
├── common.rpym
└── common.rpymc
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Created by https://www.toptal.com/developers/gitignore/api/renpy
2 | # Edit at https://www.toptal.com/developers/gitignore?templates=renpy
3 |
4 | ### Renpy ###
5 | # Don't track content of these folders #
6 | ########################################
7 | cache/
8 | saves/
9 |
10 |
11 | # Compiled source #
12 | ###################
13 | *.com
14 | *.class
15 | *.dll
16 | *.exe
17 | *.o
18 | *.so
19 |
20 | *.rpyc
21 | *.rpymc
22 |
23 |
24 | # The log file and other misc things #
25 | ######################################
26 | log.txt
27 | errors.txt
28 | traceback.txt
29 | files.txt
30 |
31 | # End of https://www.toptal.com/developers/gitignore/api/renpy
32 | *.rpyc
33 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | GNU GENERAL PUBLIC LICENSE
2 | Version 3, 29 June 2007
3 |
4 | Copyright (C) 2007 Free Software Foundation, Inc.
5 | Everyone is permitted to copy and distribute verbatim copies
6 | of this license document, but changing it is not allowed.
7 |
8 | Preamble
9 |
10 | The GNU General Public License is a free, copyleft license for
11 | software and other kinds of works.
12 |
13 | The licenses for most software and other practical works are designed
14 | to take away your freedom to share and change the works. By contrast,
15 | the GNU General Public License is intended to guarantee your freedom to
16 | share and change all versions of a program--to make sure it remains free
17 | software for all its users. We, the Free Software Foundation, use the
18 | GNU General Public License for most of our software; it applies also to
19 | any other work released this way by its authors. You can apply it to
20 | your programs, too.
21 |
22 | When we speak of free software, we are referring to freedom, not
23 | price. Our General Public Licenses are designed to make sure that you
24 | have the freedom to distribute copies of free software (and charge for
25 | them if you wish), that you receive source code or can get it if you
26 | want it, that you can change the software or use pieces of it in new
27 | free programs, and that you know you can do these things.
28 |
29 | To protect your rights, we need to prevent others from denying you
30 | these rights or asking you to surrender the rights. Therefore, you have
31 | certain responsibilities if you distribute copies of the software, or if
32 | you modify it: responsibilities to respect the freedom of others.
33 |
34 | For example, if you distribute copies of such a program, whether
35 | gratis or for a fee, you must pass on to the recipients the same
36 | freedoms that you received. You must make sure that they, too, receive
37 | or can get the source code. And you must show them these terms so they
38 | know their rights.
39 |
40 | Developers that use the GNU GPL protect your rights with two steps:
41 | (1) assert copyright on the software, and (2) offer you this License
42 | giving you legal permission to copy, distribute and/or modify it.
43 |
44 | For the developers' and authors' protection, the GPL clearly explains
45 | that there is no warranty for this free software. For both users' and
46 | authors' sake, the GPL requires that modified versions be marked as
47 | changed, so that their problems will not be attributed erroneously to
48 | authors of previous versions.
49 |
50 | Some devices are designed to deny users access to install or run
51 | modified versions of the software inside them, although the manufacturer
52 | can do so. This is fundamentally incompatible with the aim of
53 | protecting users' freedom to change the software. The systematic
54 | pattern of such abuse occurs in the area of products for individuals to
55 | use, which is precisely where it is most unacceptable. Therefore, we
56 | have designed this version of the GPL to prohibit the practice for those
57 | products. If such problems arise substantially in other domains, we
58 | stand ready to extend this provision to those domains in future versions
59 | of the GPL, as needed to protect the freedom of users.
60 |
61 | Finally, every program is threatened constantly by software patents.
62 | States should not allow patents to restrict development and use of
63 | software on general-purpose computers, but in those that do, we wish to
64 | avoid the special danger that patents applied to a free program could
65 | make it effectively proprietary. To prevent this, the GPL assures that
66 | patents cannot be used to render the program non-free.
67 |
68 | The precise terms and conditions for copying, distribution and
69 | modification follow.
70 |
71 | TERMS AND CONDITIONS
72 |
73 | 0. Definitions.
74 |
75 | "This License" refers to version 3 of the GNU General Public License.
76 |
77 | "Copyright" also means copyright-like laws that apply to other kinds of
78 | works, such as semiconductor masks.
79 |
80 | "The Program" refers to any copyrightable work licensed under this
81 | License. Each licensee is addressed as "you". "Licensees" and
82 | "recipients" may be individuals or organizations.
83 |
84 | To "modify" a work means to copy from or adapt all or part of the work
85 | in a fashion requiring copyright permission, other than the making of an
86 | exact copy. The resulting work is called a "modified version" of the
87 | earlier work or a work "based on" the earlier work.
88 |
89 | A "covered work" means either the unmodified Program or a work based
90 | on the Program.
91 |
92 | To "propagate" a work means to do anything with it that, without
93 | permission, would make you directly or secondarily liable for
94 | infringement under applicable copyright law, except executing it on a
95 | computer or modifying a private copy. Propagation includes copying,
96 | distribution (with or without modification), making available to the
97 | public, and in some countries other activities as well.
98 |
99 | To "convey" a work means any kind of propagation that enables other
100 | parties to make or receive copies. Mere interaction with a user through
101 | a computer network, with no transfer of a copy, is not conveying.
102 |
103 | An interactive user interface displays "Appropriate Legal Notices"
104 | to the extent that it includes a convenient and prominently visible
105 | feature that (1) displays an appropriate copyright notice, and (2)
106 | tells the user that there is no warranty for the work (except to the
107 | extent that warranties are provided), that licensees may convey the
108 | work under this License, and how to view a copy of this License. If
109 | the interface presents a list of user commands or options, such as a
110 | menu, a prominent item in the list meets this criterion.
111 |
112 | 1. Source Code.
113 |
114 | The "source code" for a work means the preferred form of the work
115 | for making modifications to it. "Object code" means any non-source
116 | form of a work.
117 |
118 | A "Standard Interface" means an interface that either is an official
119 | standard defined by a recognized standards body, or, in the case of
120 | interfaces specified for a particular programming language, one that
121 | is widely used among developers working in that language.
122 |
123 | The "System Libraries" of an executable work include anything, other
124 | than the work as a whole, that (a) is included in the normal form of
125 | packaging a Major Component, but which is not part of that Major
126 | Component, and (b) serves only to enable use of the work with that
127 | Major Component, or to implement a Standard Interface for which an
128 | implementation is available to the public in source code form. A
129 | "Major Component", in this context, means a major essential component
130 | (kernel, window system, and so on) of the specific operating system
131 | (if any) on which the executable work runs, or a compiler used to
132 | produce the work, or an object code interpreter used to run it.
133 |
134 | The "Corresponding Source" for a work in object code form means all
135 | the source code needed to generate, install, and (for an executable
136 | work) run the object code and to modify the work, including scripts to
137 | control those activities. However, it does not include the work's
138 | System Libraries, or general-purpose tools or generally available free
139 | programs which are used unmodified in performing those activities but
140 | which are not part of the work. For example, Corresponding Source
141 | includes interface definition files associated with source files for
142 | the work, and the source code for shared libraries and dynamically
143 | linked subprograms that the work is specifically designed to require,
144 | such as by intimate data communication or control flow between those
145 | subprograms and other parts of the work.
146 |
147 | The Corresponding Source need not include anything that users
148 | can regenerate automatically from other parts of the Corresponding
149 | Source.
150 |
151 | The Corresponding Source for a work in source code form is that
152 | same work.
153 |
154 | 2. Basic Permissions.
155 |
156 | All rights granted under this License are granted for the term of
157 | copyright on the Program, and are irrevocable provided the stated
158 | conditions are met. This License explicitly affirms your unlimited
159 | permission to run the unmodified Program. The output from running a
160 | covered work is covered by this License only if the output, given its
161 | content, constitutes a covered work. This License acknowledges your
162 | rights of fair use or other equivalent, as provided by copyright law.
163 |
164 | You may make, run and propagate covered works that you do not
165 | convey, without conditions so long as your license otherwise remains
166 | in force. You may convey covered works to others for the sole purpose
167 | of having them make modifications exclusively for you, or provide you
168 | with facilities for running those works, provided that you comply with
169 | the terms of this License in conveying all material for which you do
170 | not control copyright. Those thus making or running the covered works
171 | for you must do so exclusively on your behalf, under your direction
172 | and control, on terms that prohibit them from making any copies of
173 | your copyrighted material outside their relationship with you.
174 |
175 | Conveying under any other circumstances is permitted solely under
176 | the conditions stated below. Sublicensing is not allowed; section 10
177 | makes it unnecessary.
178 |
179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
180 |
181 | No covered work shall be deemed part of an effective technological
182 | measure under any applicable law fulfilling obligations under article
183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or
184 | similar laws prohibiting or restricting circumvention of such
185 | measures.
186 |
187 | When you convey a covered work, you waive any legal power to forbid
188 | circumvention of technological measures to the extent such circumvention
189 | is effected by exercising rights under this License with respect to
190 | the covered work, and you disclaim any intention to limit operation or
191 | modification of the work as a means of enforcing, against the work's
192 | users, your or third parties' legal rights to forbid circumvention of
193 | technological measures.
194 |
195 | 4. Conveying Verbatim Copies.
196 |
197 | You may convey verbatim copies of the Program's source code as you
198 | receive it, in any medium, provided that you conspicuously and
199 | appropriately publish on each copy an appropriate copyright notice;
200 | keep intact all notices stating that this License and any
201 | non-permissive terms added in accord with section 7 apply to the code;
202 | keep intact all notices of the absence of any warranty; and give all
203 | recipients a copy of this License along with the Program.
204 |
205 | You may charge any price or no price for each copy that you convey,
206 | and you may offer support or warranty protection for a fee.
207 |
208 | 5. Conveying Modified Source Versions.
209 |
210 | You may convey a work based on the Program, or the modifications to
211 | produce it from the Program, in the form of source code under the
212 | terms of section 4, provided that you also meet all of these conditions:
213 |
214 | a) The work must carry prominent notices stating that you modified
215 | it, and giving a relevant date.
216 |
217 | b) The work must carry prominent notices stating that it is
218 | released under this License and any conditions added under section
219 | 7. This requirement modifies the requirement in section 4 to
220 | "keep intact all notices".
221 |
222 | c) You must license the entire work, as a whole, under this
223 | License to anyone who comes into possession of a copy. This
224 | License will therefore apply, along with any applicable section 7
225 | additional terms, to the whole of the work, and all its parts,
226 | regardless of how they are packaged. This License gives no
227 | permission to license the work in any other way, but it does not
228 | invalidate such permission if you have separately received it.
229 |
230 | d) If the work has interactive user interfaces, each must display
231 | Appropriate Legal Notices; however, if the Program has interactive
232 | interfaces that do not display Appropriate Legal Notices, your
233 | work need not make them do so.
234 |
235 | A compilation of a covered work with other separate and independent
236 | works, which are not by their nature extensions of the covered work,
237 | and which are not combined with it such as to form a larger program,
238 | in or on a volume of a storage or distribution medium, is called an
239 | "aggregate" if the compilation and its resulting copyright are not
240 | used to limit the access or legal rights of the compilation's users
241 | beyond what the individual works permit. Inclusion of a covered work
242 | in an aggregate does not cause this License to apply to the other
243 | parts of the aggregate.
244 |
245 | 6. Conveying Non-Source Forms.
246 |
247 | You may convey a covered work in object code form under the terms
248 | of sections 4 and 5, provided that you also convey the
249 | machine-readable Corresponding Source under the terms of this License,
250 | in one of these ways:
251 |
252 | a) Convey the object code in, or embodied in, a physical product
253 | (including a physical distribution medium), accompanied by the
254 | Corresponding Source fixed on a durable physical medium
255 | customarily used for software interchange.
256 |
257 | b) Convey the object code in, or embodied in, a physical product
258 | (including a physical distribution medium), accompanied by a
259 | written offer, valid for at least three years and valid for as
260 | long as you offer spare parts or customer support for that product
261 | model, to give anyone who possesses the object code either (1) a
262 | copy of the Corresponding Source for all the software in the
263 | product that is covered by this License, on a durable physical
264 | medium customarily used for software interchange, for a price no
265 | more than your reasonable cost of physically performing this
266 | conveying of source, or (2) access to copy the
267 | Corresponding Source from a network server at no charge.
268 |
269 | c) Convey individual copies of the object code with a copy of the
270 | written offer to provide the Corresponding Source. This
271 | alternative is allowed only occasionally and noncommercially, and
272 | only if you received the object code with such an offer, in accord
273 | with subsection 6b.
274 |
275 | d) Convey the object code by offering access from a designated
276 | place (gratis or for a charge), and offer equivalent access to the
277 | Corresponding Source in the same way through the same place at no
278 | further charge. You need not require recipients to copy the
279 | Corresponding Source along with the object code. If the place to
280 | copy the object code is a network server, the Corresponding Source
281 | may be on a different server (operated by you or a third party)
282 | that supports equivalent copying facilities, provided you maintain
283 | clear directions next to the object code saying where to find the
284 | Corresponding Source. Regardless of what server hosts the
285 | Corresponding Source, you remain obligated to ensure that it is
286 | available for as long as needed to satisfy these requirements.
287 |
288 | e) Convey the object code using peer-to-peer transmission, provided
289 | you inform other peers where the object code and Corresponding
290 | Source of the work are being offered to the general public at no
291 | charge under subsection 6d.
292 |
293 | A separable portion of the object code, whose source code is excluded
294 | from the Corresponding Source as a System Library, need not be
295 | included in conveying the object code work.
296 |
297 | A "User Product" is either (1) a "consumer product", which means any
298 | tangible personal property which is normally used for personal, family,
299 | or household purposes, or (2) anything designed or sold for incorporation
300 | into a dwelling. In determining whether a product is a consumer product,
301 | doubtful cases shall be resolved in favor of coverage. For a particular
302 | product received by a particular user, "normally used" refers to a
303 | typical or common use of that class of product, regardless of the status
304 | of the particular user or of the way in which the particular user
305 | actually uses, or expects or is expected to use, the product. A product
306 | is a consumer product regardless of whether the product has substantial
307 | commercial, industrial or non-consumer uses, unless such uses represent
308 | the only significant mode of use of the product.
309 |
310 | "Installation Information" for a User Product means any methods,
311 | procedures, authorization keys, or other information required to install
312 | and execute modified versions of a covered work in that User Product from
313 | a modified version of its Corresponding Source. The information must
314 | suffice to ensure that the continued functioning of the modified object
315 | code is in no case prevented or interfered with solely because
316 | modification has been made.
317 |
318 | If you convey an object code work under this section in, or with, or
319 | specifically for use in, a User Product, and the conveying occurs as
320 | part of a transaction in which the right of possession and use of the
321 | User Product is transferred to the recipient in perpetuity or for a
322 | fixed term (regardless of how the transaction is characterized), the
323 | Corresponding Source conveyed under this section must be accompanied
324 | by the Installation Information. But this requirement does not apply
325 | if neither you nor any third party retains the ability to install
326 | modified object code on the User Product (for example, the work has
327 | been installed in ROM).
328 |
329 | The requirement to provide Installation Information does not include a
330 | requirement to continue to provide support service, warranty, or updates
331 | for a work that has been modified or installed by the recipient, or for
332 | the User Product in which it has been modified or installed. Access to a
333 | network may be denied when the modification itself materially and
334 | adversely affects the operation of the network or violates the rules and
335 | protocols for communication across the network.
336 |
337 | Corresponding Source conveyed, and Installation Information provided,
338 | in accord with this section must be in a format that is publicly
339 | documented (and with an implementation available to the public in
340 | source code form), and must require no special password or key for
341 | unpacking, reading or copying.
342 |
343 | 7. Additional Terms.
344 |
345 | "Additional permissions" are terms that supplement the terms of this
346 | License by making exceptions from one or more of its conditions.
347 | Additional permissions that are applicable to the entire Program shall
348 | be treated as though they were included in this License, to the extent
349 | that they are valid under applicable law. If additional permissions
350 | apply only to part of the Program, that part may be used separately
351 | under those permissions, but the entire Program remains governed by
352 | this License without regard to the additional permissions.
353 |
354 | When you convey a copy of a covered work, you may at your option
355 | remove any additional permissions from that copy, or from any part of
356 | it. (Additional permissions may be written to require their own
357 | removal in certain cases when you modify the work.) You may place
358 | additional permissions on material, added by you to a covered work,
359 | for which you have or can give appropriate copyright permission.
360 |
361 | Notwithstanding any other provision of this License, for material you
362 | add to a covered work, you may (if authorized by the copyright holders of
363 | that material) supplement the terms of this License with terms:
364 |
365 | a) Disclaiming warranty or limiting liability differently from the
366 | terms of sections 15 and 16 of this License; or
367 |
368 | b) Requiring preservation of specified reasonable legal notices or
369 | author attributions in that material or in the Appropriate Legal
370 | Notices displayed by works containing it; or
371 |
372 | c) Prohibiting misrepresentation of the origin of that material, or
373 | requiring that modified versions of such material be marked in
374 | reasonable ways as different from the original version; or
375 |
376 | d) Limiting the use for publicity purposes of names of licensors or
377 | authors of the material; or
378 |
379 | e) Declining to grant rights under trademark law for use of some
380 | trade names, trademarks, or service marks; or
381 |
382 | f) Requiring indemnification of licensors and authors of that
383 | material by anyone who conveys the material (or modified versions of
384 | it) with contractual assumptions of liability to the recipient, for
385 | any liability that these contractual assumptions directly impose on
386 | those licensors and authors.
387 |
388 | All other non-permissive additional terms are considered "further
389 | restrictions" within the meaning of section 10. If the Program as you
390 | received it, or any part of it, contains a notice stating that it is
391 | governed by this License along with a term that is a further
392 | restriction, you may remove that term. If a license document contains
393 | a further restriction but permits relicensing or conveying under this
394 | License, you may add to a covered work material governed by the terms
395 | of that license document, provided that the further restriction does
396 | not survive such relicensing or conveying.
397 |
398 | If you add terms to a covered work in accord with this section, you
399 | must place, in the relevant source files, a statement of the
400 | additional terms that apply to those files, or a notice indicating
401 | where to find the applicable terms.
402 |
403 | Additional terms, permissive or non-permissive, may be stated in the
404 | form of a separately written license, or stated as exceptions;
405 | the above requirements apply either way.
406 |
407 | 8. Termination.
408 |
409 | You may not propagate or modify a covered work except as expressly
410 | provided under this License. Any attempt otherwise to propagate or
411 | modify it is void, and will automatically terminate your rights under
412 | this License (including any patent licenses granted under the third
413 | paragraph of section 11).
414 |
415 | However, if you cease all violation of this License, then your
416 | license from a particular copyright holder is reinstated (a)
417 | provisionally, unless and until the copyright holder explicitly and
418 | finally terminates your license, and (b) permanently, if the copyright
419 | holder fails to notify you of the violation by some reasonable means
420 | prior to 60 days after the cessation.
421 |
422 | Moreover, your license from a particular copyright holder is
423 | reinstated permanently if the copyright holder notifies you of the
424 | violation by some reasonable means, this is the first time you have
425 | received notice of violation of this License (for any work) from that
426 | copyright holder, and you cure the violation prior to 30 days after
427 | your receipt of the notice.
428 |
429 | Termination of your rights under this section does not terminate the
430 | licenses of parties who have received copies or rights from you under
431 | this License. If your rights have been terminated and not permanently
432 | reinstated, you do not qualify to receive new licenses for the same
433 | material under section 10.
434 |
435 | 9. Acceptance Not Required for Having Copies.
436 |
437 | You are not required to accept this License in order to receive or
438 | run a copy of the Program. Ancillary propagation of a covered work
439 | occurring solely as a consequence of using peer-to-peer transmission
440 | to receive a copy likewise does not require acceptance. However,
441 | nothing other than this License grants you permission to propagate or
442 | modify any covered work. These actions infringe copyright if you do
443 | not accept this License. Therefore, by modifying or propagating a
444 | covered work, you indicate your acceptance of this License to do so.
445 |
446 | 10. Automatic Licensing of Downstream Recipients.
447 |
448 | Each time you convey a covered work, the recipient automatically
449 | receives a license from the original licensors, to run, modify and
450 | propagate that work, subject to this License. You are not responsible
451 | for enforcing compliance by third parties with this License.
452 |
453 | An "entity transaction" is a transaction transferring control of an
454 | organization, or substantially all assets of one, or subdividing an
455 | organization, or merging organizations. If propagation of a covered
456 | work results from an entity transaction, each party to that
457 | transaction who receives a copy of the work also receives whatever
458 | licenses to the work the party's predecessor in interest had or could
459 | give under the previous paragraph, plus a right to possession of the
460 | Corresponding Source of the work from the predecessor in interest, if
461 | the predecessor has it or can get it with reasonable efforts.
462 |
463 | You may not impose any further restrictions on the exercise of the
464 | rights granted or affirmed under this License. For example, you may
465 | not impose a license fee, royalty, or other charge for exercise of
466 | rights granted under this License, and you may not initiate litigation
467 | (including a cross-claim or counterclaim in a lawsuit) alleging that
468 | any patent claim is infringed by making, using, selling, offering for
469 | sale, or importing the Program or any portion of it.
470 |
471 | 11. Patents.
472 |
473 | A "contributor" is a copyright holder who authorizes use under this
474 | License of the Program or a work on which the Program is based. The
475 | work thus licensed is called the contributor's "contributor version".
476 |
477 | A contributor's "essential patent claims" are all patent claims
478 | owned or controlled by the contributor, whether already acquired or
479 | hereafter acquired, that would be infringed by some manner, permitted
480 | by this License, of making, using, or selling its contributor version,
481 | but do not include claims that would be infringed only as a
482 | consequence of further modification of the contributor version. For
483 | purposes of this definition, "control" includes the right to grant
484 | patent sublicenses in a manner consistent with the requirements of
485 | this License.
486 |
487 | Each contributor grants you a non-exclusive, worldwide, royalty-free
488 | patent license under the contributor's essential patent claims, to
489 | make, use, sell, offer for sale, import and otherwise run, modify and
490 | propagate the contents of its contributor version.
491 |
492 | In the following three paragraphs, a "patent license" is any express
493 | agreement or commitment, however denominated, not to enforce a patent
494 | (such as an express permission to practice a patent or covenant not to
495 | sue for patent infringement). To "grant" such a patent license to a
496 | party means to make such an agreement or commitment not to enforce a
497 | patent against the party.
498 |
499 | If you convey a covered work, knowingly relying on a patent license,
500 | and the Corresponding Source of the work is not available for anyone
501 | to copy, free of charge and under the terms of this License, through a
502 | publicly available network server or other readily accessible means,
503 | then you must either (1) cause the Corresponding Source to be so
504 | available, or (2) arrange to deprive yourself of the benefit of the
505 | patent license for this particular work, or (3) arrange, in a manner
506 | consistent with the requirements of this License, to extend the patent
507 | license to downstream recipients. "Knowingly relying" means you have
508 | actual knowledge that, but for the patent license, your conveying the
509 | covered work in a country, or your recipient's use of the covered work
510 | in a country, would infringe one or more identifiable patents in that
511 | country that you have reason to believe are valid.
512 |
513 | If, pursuant to or in connection with a single transaction or
514 | arrangement, you convey, or propagate by procuring conveyance of, a
515 | covered work, and grant a patent license to some of the parties
516 | receiving the covered work authorizing them to use, propagate, modify
517 | or convey a specific copy of the covered work, then the patent license
518 | you grant is automatically extended to all recipients of the covered
519 | work and works based on it.
520 |
521 | A patent license is "discriminatory" if it does not include within
522 | the scope of its coverage, prohibits the exercise of, or is
523 | conditioned on the non-exercise of one or more of the rights that are
524 | specifically granted under this License. You may not convey a covered
525 | work if you are a party to an arrangement with a third party that is
526 | in the business of distributing software, under which you make payment
527 | to the third party based on the extent of your activity of conveying
528 | the work, and under which the third party grants, to any of the
529 | parties who would receive the covered work from you, a discriminatory
530 | patent license (a) in connection with copies of the covered work
531 | conveyed by you (or copies made from those copies), or (b) primarily
532 | for and in connection with specific products or compilations that
533 | contain the covered work, unless you entered into that arrangement,
534 | or that patent license was granted, prior to 28 March 2007.
535 |
536 | Nothing in this License shall be construed as excluding or limiting
537 | any implied license or other defenses to infringement that may
538 | otherwise be available to you under applicable patent law.
539 |
540 | 12. No Surrender of Others' Freedom.
541 |
542 | If conditions are imposed on you (whether by court order, agreement or
543 | otherwise) that contradict the conditions of this License, they do not
544 | excuse you from the conditions of this License. If you cannot convey a
545 | covered work so as to satisfy simultaneously your obligations under this
546 | License and any other pertinent obligations, then as a consequence you may
547 | not convey it at all. For example, if you agree to terms that obligate you
548 | to collect a royalty for further conveying from those to whom you convey
549 | the Program, the only way you could satisfy both those terms and this
550 | License would be to refrain entirely from conveying the Program.
551 |
552 | 13. Use with the GNU Affero General Public License.
553 |
554 | Notwithstanding any other provision of this License, you have
555 | permission to link or combine any covered work with a work licensed
556 | under version 3 of the GNU Affero General Public License into a single
557 | combined work, and to convey the resulting work. The terms of this
558 | License will continue to apply to the part which is the covered work,
559 | but the special requirements of the GNU Affero General Public License,
560 | section 13, concerning interaction through a network will apply to the
561 | combination as such.
562 |
563 | 14. Revised Versions of this License.
564 |
565 | The Free Software Foundation may publish revised and/or new versions of
566 | the GNU General Public License from time to time. Such new versions will
567 | be similar in spirit to the present version, but may differ in detail to
568 | address new problems or concerns.
569 |
570 | Each version is given a distinguishing version number. If the
571 | Program specifies that a certain numbered version of the GNU General
572 | Public License "or any later version" applies to it, you have the
573 | option of following the terms and conditions either of that numbered
574 | version or of any later version published by the Free Software
575 | Foundation. If the Program does not specify a version number of the
576 | GNU General Public License, you may choose any version ever published
577 | by the Free Software Foundation.
578 |
579 | If the Program specifies that a proxy can decide which future
580 | versions of the GNU General Public License can be used, that proxy's
581 | public statement of acceptance of a version permanently authorizes you
582 | to choose that version for the Program.
583 |
584 | Later license versions may give you additional or different
585 | permissions. However, no additional obligations are imposed on any
586 | author or copyright holder as a result of your choosing to follow a
587 | later version.
588 |
589 | 15. Disclaimer of Warranty.
590 |
591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
599 |
600 | 16. Limitation of Liability.
601 |
602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
610 | SUCH DAMAGES.
611 |
612 | 17. Interpretation of Sections 15 and 16.
613 |
614 | If the disclaimer of warranty and limitation of liability provided
615 | above cannot be given local legal effect according to their terms,
616 | reviewing courts shall apply local law that most closely approximates
617 | an absolute waiver of all civil liability in connection with the
618 | Program, unless a warranty or assumption of liability accompanies a
619 | copy of the Program in return for a fee.
620 |
621 | END OF TERMS AND CONDITIONS
622 |
623 | How to Apply These Terms to Your New Programs
624 |
625 | If you develop a new program, and you want it to be of the greatest
626 | possible use to the public, the best way to achieve this is to make it
627 | free software which everyone can redistribute and change under these terms.
628 |
629 | To do so, attach the following notices to the program. It is safest
630 | to attach them to the start of each source file to most effectively
631 | state the exclusion of warranty; and each file should have at least
632 | the "copyright" line and a pointer to where the full notice is found.
633 |
634 |
635 | Copyright (C)
636 |
637 | This program is free software: you can redistribute it and/or modify
638 | it under the terms of the GNU General Public License as published by
639 | the Free Software Foundation, either version 3 of the License, or
640 | (at your option) any later version.
641 |
642 | This program is distributed in the hope that it will be useful,
643 | but WITHOUT ANY WARRANTY; without even the implied warranty of
644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
645 | GNU General Public License for more details.
646 |
647 | You should have received a copy of the GNU General Public License
648 | along with this program. If not, see .
649 |
650 | Also add information on how to contact you by electronic and paper mail.
651 |
652 | If the program does terminal interaction, make it output a short
653 | notice like this when it starts in an interactive mode:
654 |
655 | Copyright (C)
656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
657 | This is free software, and you are welcome to redistribute it
658 | under certain conditions; type `show c' for details.
659 |
660 | The hypothetical commands `show w' and `show c' should show the appropriate
661 | parts of the General Public License. Of course, your program's commands
662 | might be different; for a GUI interface, you would use an "about box".
663 |
664 | You should also get your employer (if you work as a programmer) or school,
665 | if any, to sign a "copyright disclaimer" for the program, if necessary.
666 | For more information on this, and how to apply and follow the GNU GPL, see
667 | .
668 |
669 | The GNU General Public License does not permit incorporating your program
670 | into proprietary programs. If your program is a subroutine library, you
671 | may consider it more useful to permit linking proprietary applications with
672 | the library. If this is what you want to do, use the GNU Lesser General
673 | Public License instead of this License. But first, please read
674 | .
675 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # RenPyChatGPTExample
2 | Simple ChatGPT plugin for Ren'Py and simple example on how to use it
3 |
4 | For a fully fledged open source videogame based on this plugin, go here : https://github.com/Taiko3615/Danse-Macabre
5 |
6 | # How to use this plugin in your Ren'Py project ?
7 |
8 | Just copy paste the "python-packages" folder into your "game" folder.
9 |
10 | In your script.rpy try to import the chatgpt package, if it doesn't crash it worked !
11 |
12 | Then add this basic hello world example in your script to see if it all worked :
13 | ```
14 | define e = Character("Eileen")
15 |
16 | e "Hello there, my name is Eileen, I am so happy to see you ! Hihihi"
17 |
18 | python:
19 | import chatgpt
20 |
21 | apikey = renpy.input("What is your OPENAI API Key?", length=64)
22 |
23 | messages = [
24 | {"role": "system", "content": "You are Eileen, a tennage student enrolled at Miskatonic Univeristy of Arkham. You are secretly in love with the user. You laugh very frequently and finish your sentences with 'Hihihi'"},
25 | {"role": "assistant", "content": "Hello there, my name is Eileen, who are you ?"}
26 | ]
27 |
28 | while True:
29 | user_input = renpy.input("What do you say ?", length=1000)
30 | messages.append(
31 | {"role": "user", "content": user_input}
32 | )
33 |
34 | messages = chatgpt.completion(messages,apikey)
35 | response = messages[-1]["content"]
36 | e("[response]")
37 | ```
38 | # Important note about OpenAI API Keys !
39 |
40 | While developing your game, it's ok to hardcode your OpenAI API key locally to do your tests.
41 | But.
42 | It's very important that you never actually publish your OpenAI API key anywhere. Neither inside your game assets or on your github repo (if it's a public repo).
43 |
44 | Because if anyone has your API Key, they can send hundreds of thousands of requests using your API key and bankrupt you.
45 |
46 | They can also release another game that uses your API key and the requests sent by your players will be billed to you.
47 |
48 | And nobody wants that, right ?
49 |
50 | So, how to still publish your game and allow your players to use your API key without seeing it ?
51 |
52 | The easiest way is for you to create a kind of "proxy" that you control and that filters what requests are ok and which requests are not OK, and this proxy will inject your API key in your requests.
53 |
54 | For example, you could make a list of "NPC prompts" that are in your game, those are allowed, but other unrelated requests aren't allowed.
55 |
56 | Here's a sample code for a very basic proxy.php file you could use, just create this "proxy.php" file on your_server.com so that the url of this file is http://your_server.com/proxy.php :
57 | ```
58 | "system",
75 | "content" => "You are Eileen, a tennage student enrolled at Miskatonic Univeristy of Arkham. You are secretly in love with the user. You laugh very frequently and finish your sentences with 'Hihihi'"
76 | ),
77 | array(
78 | "role" => "system",
79 | "content" => "You are Brother Conrad, a crazy monk scribe at the Abbey of Neuberg, you are very nervous and scratch your arms intermitently."
80 | ),
81 | array(
82 | "role" => "system",
83 | "content" => "You are the Abbot of the Abbey of Neuberg, you like gardening."
84 | )
85 | );
86 |
87 | $contains_authorised_npc = false;
88 | if (isset($data['messages']) && is_array($data['messages'])) {
89 | foreach ($data['messages'] as $message) {
90 | if (in_array($message, $authorised_npcs)) {
91 | $contains_authorised_npc = true;
92 | break;
93 | }
94 | }
95 | }
96 |
97 | if ($contains_authorised_npc) {
98 | // Forward the request to the OpenAI API with the API key
99 | $ch = curl_init($openai_api_url);
100 | curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
101 | curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
102 | curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
103 | curl_setopt($ch, CURLOPT_HTTPHEADER, array(
104 | 'Content-Type: application/json',
105 | 'Authorization: Bearer ' . $openai_api_key,
106 | 'Content-Length: ' . strlen($json_data))
107 | );
108 |
109 | // Get the response from the OpenAI API
110 | $response = curl_exec($ch);
111 |
112 | // Check for errors and send the response
113 | if (curl_errno($ch)) {
114 | $error_msg = curl_error($ch);
115 | http_response_code(500);
116 | echo json_encode(array('error' => $error_msg));
117 | } else {
118 | http_response_code(200);
119 | echo $response;
120 | }
121 |
122 | // Close the cURL session
123 | curl_close($ch);
124 | } else {
125 | // Return an error message if none of the Authorised NPCs are present
126 | http_response_code(400);
127 | echo json_encode(array('error' => 'None of the Authorised NPCs were found in the request.'));
128 | }
129 |
130 | ```
131 |
132 | Now in your game instead of calling : chatgpt.completion(messages,api_key=apikey), call chatgpt.completion(messages,proxy="http://your_server.com/proxy.php")
133 |
134 | And don't forget to modify your proxy.php file each time you add a new NPC in your game.
135 |
136 | This is just a very simple proxy.php, you may want to consider adding some rate limitations or other securities.
137 |
--------------------------------------------------------------------------------
/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 = '#0099cc'
27 |
28 | ## The color used for a text button when it is neither selected nor hovered.
29 | define gui.idle_color = '#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 = '#aaaaaa'
34 |
35 | ## The color that is used for buttons and bars that are hovered.
36 | define gui.hover_color = '#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 = '#ffffff'
41 |
42 | ## The color used for a text button when it cannot be selected.
43 | define gui.insensitive_color = '#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 = '#003d51'
48 | define gui.hover_muted_color = '#005b7a'
49 |
50 | ## The colors used for dialogue and menu choice text.
51 | define gui.text_color = '#ffffff'
52 | define gui.interface_text_color = '#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 | @gui.variant
419 | def touch():
420 |
421 | gui.quick_button_borders = Borders(60, 21, 60, 0)
422 |
423 | ## This changes the size and spacing of various GUI elements to ensure they
424 | ## are easily visible on phones.
425 | @gui.variant
426 | def small():
427 |
428 | ## Font sizes.
429 | gui.text_size = 45
430 | gui.name_text_size = 54
431 | gui.notify_text_size = 38
432 | gui.interface_text_size = 45
433 | gui.button_text_size = 45
434 | gui.label_text_size = 51
435 |
436 | ## Adjust the location of the textbox.
437 | gui.textbox_height = 360
438 | gui.name_xpos = 120
439 | gui.dialogue_xpos = 135
440 | gui.dialogue_width = 1650
441 |
442 | ## Change the size and spacing of various things.
443 | gui.slider_size = 54
444 |
445 | gui.choice_button_width = 1860
446 | gui.choice_button_text_size = 45
447 |
448 | gui.navigation_spacing = 30
449 | gui.pref_button_spacing = 15
450 |
451 | gui.history_height = 285
452 | gui.history_text_width = 1035
453 |
454 | gui.quick_button_text_size = 30
455 |
456 | ## File button layout.
457 | gui.file_slot_cols = 2
458 | gui.file_slot_rows = 2
459 |
460 | ## NVL-mode.
461 | gui.nvl_height = 255
462 |
463 | gui.nvl_name_width = 458
464 | gui.nvl_name_xpos = 488
465 |
466 | gui.nvl_text_width = 1373
467 | gui.nvl_text_xpos = 518
468 | gui.nvl_text_ypos = 8
469 |
470 | gui.nvl_thought_width = 1860
471 | gui.nvl_thought_xpos = 30
472 |
473 | gui.nvl_button_width = 1860
474 | gui.nvl_button_xpos = 30
475 |
--------------------------------------------------------------------------------
/game/gui.rpyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui.rpyc
--------------------------------------------------------------------------------
/game/gui/bar/bottom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/bar/bottom.png
--------------------------------------------------------------------------------
/game/gui/bar/left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/bar/left.png
--------------------------------------------------------------------------------
/game/gui/bar/right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/bar/right.png
--------------------------------------------------------------------------------
/game/gui/bar/top.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/bar/top.png
--------------------------------------------------------------------------------
/game/gui/button/check_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/button/check_foreground.png
--------------------------------------------------------------------------------
/game/gui/button/check_selected_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/button/check_selected_foreground.png
--------------------------------------------------------------------------------
/game/gui/button/choice_hover_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/button/choice_hover_background.png
--------------------------------------------------------------------------------
/game/gui/button/choice_idle_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/button/choice_idle_background.png
--------------------------------------------------------------------------------
/game/gui/button/hover_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/button/hover_background.png
--------------------------------------------------------------------------------
/game/gui/button/idle_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/button/idle_background.png
--------------------------------------------------------------------------------
/game/gui/button/quick_hover_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/button/quick_hover_background.png
--------------------------------------------------------------------------------
/game/gui/button/quick_idle_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/button/quick_idle_background.png
--------------------------------------------------------------------------------
/game/gui/button/radio_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/button/radio_foreground.png
--------------------------------------------------------------------------------
/game/gui/button/radio_selected_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/button/radio_selected_foreground.png
--------------------------------------------------------------------------------
/game/gui/button/slot_hover_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/button/slot_hover_background.png
--------------------------------------------------------------------------------
/game/gui/button/slot_idle_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/button/slot_idle_background.png
--------------------------------------------------------------------------------
/game/gui/frame.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/frame.png
--------------------------------------------------------------------------------
/game/gui/game_menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/game_menu.png
--------------------------------------------------------------------------------
/game/gui/main_menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/main_menu.png
--------------------------------------------------------------------------------
/game/gui/namebox.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/namebox.png
--------------------------------------------------------------------------------
/game/gui/notify.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/notify.png
--------------------------------------------------------------------------------
/game/gui/nvl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/nvl.png
--------------------------------------------------------------------------------
/game/gui/overlay/confirm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/overlay/confirm.png
--------------------------------------------------------------------------------
/game/gui/overlay/game_menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/overlay/game_menu.png
--------------------------------------------------------------------------------
/game/gui/overlay/main_menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/overlay/main_menu.png
--------------------------------------------------------------------------------
/game/gui/phone/bar/bottom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/bar/bottom.png
--------------------------------------------------------------------------------
/game/gui/phone/bar/left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/bar/left.png
--------------------------------------------------------------------------------
/game/gui/phone/bar/right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/bar/right.png
--------------------------------------------------------------------------------
/game/gui/phone/bar/top.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/bar/top.png
--------------------------------------------------------------------------------
/game/gui/phone/button/check_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/button/check_foreground.png
--------------------------------------------------------------------------------
/game/gui/phone/button/check_selected_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/button/check_selected_foreground.png
--------------------------------------------------------------------------------
/game/gui/phone/button/choice_hover_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/button/choice_hover_background.png
--------------------------------------------------------------------------------
/game/gui/phone/button/choice_idle_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/button/choice_idle_background.png
--------------------------------------------------------------------------------
/game/gui/phone/button/hover_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/button/hover_background.png
--------------------------------------------------------------------------------
/game/gui/phone/button/idle_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/button/idle_background.png
--------------------------------------------------------------------------------
/game/gui/phone/button/radio_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/button/radio_foreground.png
--------------------------------------------------------------------------------
/game/gui/phone/button/radio_selected_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/button/radio_selected_foreground.png
--------------------------------------------------------------------------------
/game/gui/phone/button/slot_hover_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/button/slot_hover_background.png
--------------------------------------------------------------------------------
/game/gui/phone/button/slot_idle_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/button/slot_idle_background.png
--------------------------------------------------------------------------------
/game/gui/phone/nvl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/nvl.png
--------------------------------------------------------------------------------
/game/gui/phone/overlay/game_menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/overlay/game_menu.png
--------------------------------------------------------------------------------
/game/gui/phone/overlay/main_menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/overlay/main_menu.png
--------------------------------------------------------------------------------
/game/gui/phone/scrollbar/horizontal_hover_bar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/scrollbar/horizontal_hover_bar.png
--------------------------------------------------------------------------------
/game/gui/phone/scrollbar/horizontal_hover_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/scrollbar/horizontal_hover_thumb.png
--------------------------------------------------------------------------------
/game/gui/phone/scrollbar/horizontal_idle_bar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/scrollbar/horizontal_idle_bar.png
--------------------------------------------------------------------------------
/game/gui/phone/scrollbar/horizontal_idle_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/scrollbar/horizontal_idle_thumb.png
--------------------------------------------------------------------------------
/game/gui/phone/scrollbar/vertical_hover_bar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/scrollbar/vertical_hover_bar.png
--------------------------------------------------------------------------------
/game/gui/phone/scrollbar/vertical_hover_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/scrollbar/vertical_hover_thumb.png
--------------------------------------------------------------------------------
/game/gui/phone/scrollbar/vertical_idle_bar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/scrollbar/vertical_idle_bar.png
--------------------------------------------------------------------------------
/game/gui/phone/scrollbar/vertical_idle_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/scrollbar/vertical_idle_thumb.png
--------------------------------------------------------------------------------
/game/gui/phone/slider/horizontal_hover_bar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/slider/horizontal_hover_bar.png
--------------------------------------------------------------------------------
/game/gui/phone/slider/horizontal_hover_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/slider/horizontal_hover_thumb.png
--------------------------------------------------------------------------------
/game/gui/phone/slider/horizontal_idle_bar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/slider/horizontal_idle_bar.png
--------------------------------------------------------------------------------
/game/gui/phone/slider/horizontal_idle_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/slider/horizontal_idle_thumb.png
--------------------------------------------------------------------------------
/game/gui/phone/slider/vertical_hover_bar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/slider/vertical_hover_bar.png
--------------------------------------------------------------------------------
/game/gui/phone/slider/vertical_hover_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/slider/vertical_hover_thumb.png
--------------------------------------------------------------------------------
/game/gui/phone/slider/vertical_idle_bar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/slider/vertical_idle_bar.png
--------------------------------------------------------------------------------
/game/gui/phone/slider/vertical_idle_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/slider/vertical_idle_thumb.png
--------------------------------------------------------------------------------
/game/gui/phone/textbox.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/phone/textbox.png
--------------------------------------------------------------------------------
/game/gui/scrollbar/horizontal_hover_bar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/scrollbar/horizontal_hover_bar.png
--------------------------------------------------------------------------------
/game/gui/scrollbar/horizontal_hover_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/scrollbar/horizontal_hover_thumb.png
--------------------------------------------------------------------------------
/game/gui/scrollbar/horizontal_idle_bar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/scrollbar/horizontal_idle_bar.png
--------------------------------------------------------------------------------
/game/gui/scrollbar/horizontal_idle_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/scrollbar/horizontal_idle_thumb.png
--------------------------------------------------------------------------------
/game/gui/scrollbar/vertical_hover_bar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/scrollbar/vertical_hover_bar.png
--------------------------------------------------------------------------------
/game/gui/scrollbar/vertical_hover_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/scrollbar/vertical_hover_thumb.png
--------------------------------------------------------------------------------
/game/gui/scrollbar/vertical_idle_bar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/scrollbar/vertical_idle_bar.png
--------------------------------------------------------------------------------
/game/gui/scrollbar/vertical_idle_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/scrollbar/vertical_idle_thumb.png
--------------------------------------------------------------------------------
/game/gui/skip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/skip.png
--------------------------------------------------------------------------------
/game/gui/slider/horizontal_hover_bar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/slider/horizontal_hover_bar.png
--------------------------------------------------------------------------------
/game/gui/slider/horizontal_hover_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/slider/horizontal_hover_thumb.png
--------------------------------------------------------------------------------
/game/gui/slider/horizontal_idle_bar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/slider/horizontal_idle_bar.png
--------------------------------------------------------------------------------
/game/gui/slider/horizontal_idle_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/slider/horizontal_idle_thumb.png
--------------------------------------------------------------------------------
/game/gui/slider/vertical_hover_bar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/slider/vertical_hover_bar.png
--------------------------------------------------------------------------------
/game/gui/slider/vertical_hover_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/slider/vertical_hover_thumb.png
--------------------------------------------------------------------------------
/game/gui/slider/vertical_idle_bar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/slider/vertical_idle_bar.png
--------------------------------------------------------------------------------
/game/gui/slider/vertical_idle_thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/slider/vertical_idle_thumb.png
--------------------------------------------------------------------------------
/game/gui/textbox.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/textbox.png
--------------------------------------------------------------------------------
/game/gui/window_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/gui/window_icon.png
--------------------------------------------------------------------------------
/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 = _("RenPyChatGPTExample")
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 = "RenPyChatGPTExample"
41 |
42 |
43 | ## Sounds and music ############################################################
44 |
45 | ## These three variables control, among other things, which mixers are shown
46 | ## to the player by default. Setting one of these to False will hide the
47 | ## appropriate mixer.
48 |
49 | define config.has_sound = True
50 | define config.has_music = True
51 | define config.has_voice = True
52 |
53 |
54 | ## To allow the user to play a test sound on the sound or voice channel,
55 | ## uncomment a line below and use it to set a sample sound to play.
56 |
57 | # define config.sample_sound = "sample-sound.ogg"
58 | # define config.sample_voice = "sample-voice.ogg"
59 |
60 |
61 | ## Uncomment the following line to set an audio file that will be played while
62 | ## the player is at the main menu. This file will continue playing into the
63 | ## game, until it is stopped or another file is played.
64 |
65 | # define config.main_menu_music = "main-menu-theme.ogg"
66 |
67 |
68 | ## Transitions #################################################################
69 | ##
70 | ## These variables set transitions that are used when certain events occur.
71 | ## Each variable should be set to a transition, or None to indicate that no
72 | ## transition should be used.
73 |
74 | ## Entering or exiting the game menu.
75 |
76 | define config.enter_transition = dissolve
77 | define config.exit_transition = dissolve
78 |
79 |
80 | ## Between screens of the game menu.
81 |
82 | define config.intra_transition = dissolve
83 |
84 |
85 | ## A transition that is used after a game has been loaded.
86 |
87 | define config.after_load_transition = None
88 |
89 |
90 | ## Used when entering the main menu after the game has ended.
91 |
92 | define config.end_game_transition = None
93 |
94 |
95 | ## A variable to set the transition used when the game starts does not exist.
96 | ## Instead, use a with statement after showing the initial scene.
97 |
98 |
99 | ## Window management ###########################################################
100 | ##
101 | ## This controls when the dialogue window is displayed. If "show", it is always
102 | ## displayed. If "hide", it is only displayed when dialogue is present. If
103 | ## "auto", the window is hidden before scene statements and shown again once
104 | ## dialogue is displayed.
105 | ##
106 | ## After the game has started, this can be changed with the "window show",
107 | ## "window hide", and "window auto" statements.
108 |
109 | define config.window = "auto"
110 |
111 |
112 | ## Transitions used to show and hide the dialogue window
113 |
114 | define config.window_show_transition = Dissolve(.2)
115 | define config.window_hide_transition = Dissolve(.2)
116 |
117 |
118 | ## Preference defaults #########################################################
119 |
120 | ## Controls the default text speed. The default, 0, is infinite, while any other
121 | ## number is the number of characters per second to type out.
122 |
123 | default preferences.text_cps = 0
124 |
125 |
126 | ## The default auto-forward delay. Larger numbers lead to longer waits, with 0
127 | ## to 30 being the valid range.
128 |
129 | default preferences.afm_time = 15
130 |
131 |
132 | ## Save directory ##############################################################
133 | ##
134 | ## Controls the platform-specific place Ren'Py will place the save files for
135 | ## this game. The save files will be placed in:
136 | ##
137 | ## Windows: %APPDATA\RenPy\
138 | ##
139 | ## Macintosh: $HOME/Library/RenPy/
140 | ##
141 | ## Linux: $HOME/.renpy/
142 | ##
143 | ## This generally should not be changed, and if it is, should always be a
144 | ## literal string, not an expression.
145 |
146 | define config.save_directory = "RenPyChatGPTExample-1679242524"
147 |
148 |
149 | ## Icon ########################################################################
150 | ##
151 | ## The icon displayed on the taskbar or dock.
152 |
153 | define config.window_icon = "gui/window_icon.png"
154 |
155 |
156 | ## Build configuration #########################################################
157 | ##
158 | ## This section controls how Ren'Py turns your project into distribution files.
159 |
160 | init python:
161 |
162 | ## The following functions take file patterns. File patterns are case-
163 | ## insensitive, and matched against the path relative to the base directory,
164 | ## with and without a leading /. If multiple patterns match, the first is
165 | ## used.
166 | ##
167 | ## In a pattern:
168 | ##
169 | ## / is the directory separator.
170 | ##
171 | ## * matches all characters, except the directory separator.
172 | ##
173 | ## ** matches all characters, including the directory separator.
174 | ##
175 | ## For example, "*.txt" matches txt files in the base directory, "game/
176 | ## **.ogg" matches ogg files in the game directory or any of its
177 | ## subdirectories, and "**.psd" matches psd files anywhere in the project.
178 |
179 | ## Classify files as None to exclude them from the built distributions.
180 |
181 | build.classify('**~', None)
182 | build.classify('**.bak', None)
183 | build.classify('**/.**', None)
184 | build.classify('**/#**', None)
185 | build.classify('**/thumbs.db', None)
186 |
187 | ## To archive files, classify them as 'archive'.
188 |
189 | # build.classify('game/**.png', 'archive')
190 | # build.classify('game/**.jpg', 'archive')
191 |
192 | ## Files matching documentation patterns are duplicated in a mac app build,
193 | ## so they appear in both the app and the zip file.
194 |
195 | build.documentation('*.html')
196 | build.documentation('*.txt')
197 |
198 |
199 | ## A Google Play license key is required to download expansion files and perform
200 | ## in-app purchases. It can be found on the "Services & APIs" page of the Google
201 | ## Play developer console.
202 |
203 | # define build.google_play_key = "..."
204 |
205 |
206 | ## The username and project name associated with an itch.io project, separated
207 | ## by a slash.
208 |
209 | # define build.itch_project = "renpytom/test-project"
210 |
--------------------------------------------------------------------------------
/game/options.rpyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/options.rpyc
--------------------------------------------------------------------------------
/game/python-packages/chatgpt/__init__.py:
--------------------------------------------------------------------------------
1 | __version__ = "1.0.0"
2 |
3 | # Import required libraries
4 | import requests
5 | import json
6 |
7 | # Define the completion function that takes messages and an API key as input
8 | def completion(messages, api_key="", proxy=''):
9 | # Set the API endpoint URL for ChatGPT completions
10 | url = "https://api.openai.com/v1/chat/completions"
11 |
12 | # If a proxy is set, then it should use that instead
13 | if proxy is not None and proxy != '': url = proxy
14 |
15 | # Set the headers for the API request, including the Content-Type and Authorization with the API key
16 | headers = {
17 | "Content-Type": "application/json",
18 | "Authorization": f"Bearer {api_key}"
19 | }
20 |
21 | # Set the data for the API request, including the model and the input messages
22 | data = {
23 | "model": "gpt-3.5-turbo",
24 | "messages": messages
25 | }
26 |
27 | # Send the API request using the POST method, passing the headers and the data as JSON
28 | response = requests.post(url, headers=headers, data=json.dumps(data))
29 |
30 | # Check if the response status code is 200 (successful)
31 | if response.status_code == 200:
32 | # Extract the message from the response JSON and append it to the messages list
33 | completion = response.json()["choices"][0]["message"]
34 | messages.append(completion)
35 | return messages # Return the updated messages list
36 | else:
37 | # If the status code is not 200, raise an exception with the error details
38 | raise Exception(f"Error: {response.status_code}, {response.text}")
39 |
--------------------------------------------------------------------------------
/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 | adjust_spacing False
164 |
165 | ## Input screen ################################################################
166 | ##
167 | ## This screen is used to display renpy.input. The prompt parameter is used to
168 | ## pass a text prompt in.
169 | ##
170 | ## This screen must create an input displayable with id "input" to accept the
171 | ## various input parameters.
172 | ##
173 | ## https://www.renpy.org/doc/html/screen_special.html#input
174 |
175 | screen input(prompt):
176 | style_prefix "input"
177 |
178 | window:
179 |
180 | vbox:
181 | xanchor gui.dialogue_text_xalign
182 | xpos gui.dialogue_xpos
183 | xsize gui.dialogue_width
184 | ypos gui.dialogue_ypos
185 |
186 | text prompt style "input_prompt"
187 | input id "input"
188 |
189 | style input_prompt is default
190 |
191 | style input_prompt:
192 | xalign gui.dialogue_text_xalign
193 | properties gui.text_properties("input_prompt")
194 |
195 | style input:
196 | xalign gui.dialogue_text_xalign
197 | xmaximum gui.dialogue_width
198 |
199 |
200 | ## Choice screen ###############################################################
201 | ##
202 | ## This screen is used to display the in-game choices presented by the menu
203 | ## statement. The one parameter, items, is a list of objects, each with caption
204 | ## and action fields.
205 | ##
206 | ## https://www.renpy.org/doc/html/screen_special.html#choice
207 |
208 | screen choice(items):
209 | style_prefix "choice"
210 |
211 | vbox:
212 | for i in items:
213 | textbutton i.caption action i.action
214 |
215 |
216 | style choice_vbox is vbox
217 | style choice_button is button
218 | style choice_button_text is button_text
219 |
220 | style choice_vbox:
221 | xalign 0.5
222 | ypos 405
223 | yanchor 0.5
224 |
225 | spacing gui.choice_spacing
226 |
227 | style choice_button is default:
228 | properties gui.button_properties("choice_button")
229 |
230 | style choice_button_text is default:
231 | properties gui.button_text_properties("choice_button")
232 |
233 |
234 | ## Quick Menu screen ###########################################################
235 | ##
236 | ## The quick menu is displayed in-game to provide easy access to the out-of-game
237 | ## menus.
238 |
239 | screen quick_menu():
240 |
241 | ## Ensure this appears on top of other screens.
242 | zorder 100
243 |
244 | if quick_menu:
245 |
246 | hbox:
247 | style_prefix "quick"
248 |
249 | xalign 0.5
250 | yalign 1.0
251 |
252 | textbutton _("Back") action Rollback()
253 | textbutton _("History") action ShowMenu('history')
254 | textbutton _("Skip") action Skip() alternate Skip(fast=True, confirm=True)
255 | textbutton _("Auto") action Preference("auto-forward", "toggle")
256 | textbutton _("Save") action ShowMenu('save')
257 | textbutton _("Q.Save") action QuickSave()
258 | textbutton _("Q.Load") action QuickLoad()
259 | textbutton _("Prefs") action ShowMenu('preferences')
260 |
261 |
262 | ## This code ensures that the quick_menu screen is displayed in-game, whenever
263 | ## the player has not explicitly hidden the interface.
264 | init python:
265 | config.overlay_screens.append("quick_menu")
266 |
267 | default quick_menu = True
268 |
269 | style quick_button is default
270 | style quick_button_text is button_text
271 |
272 | style quick_button:
273 | properties gui.button_properties("quick_button")
274 |
275 | style quick_button_text:
276 | properties gui.button_text_properties("quick_button")
277 |
278 |
279 | ################################################################################
280 | ## Main and Game Menu Screens
281 | ################################################################################
282 |
283 | ## Navigation screen ###########################################################
284 | ##
285 | ## This screen is included in the main and game menus, and provides navigation
286 | ## to other menus, and to start the game.
287 |
288 | screen navigation():
289 |
290 | vbox:
291 | style_prefix "navigation"
292 |
293 | xpos gui.navigation_xpos
294 | yalign 0.5
295 |
296 | spacing gui.navigation_spacing
297 |
298 | if main_menu:
299 |
300 | textbutton _("Start") action Start()
301 |
302 | else:
303 |
304 | textbutton _("History") action ShowMenu("history")
305 |
306 | textbutton _("Save") action ShowMenu("save")
307 |
308 | textbutton _("Load") action ShowMenu("load")
309 |
310 | textbutton _("Preferences") action ShowMenu("preferences")
311 |
312 | if _in_replay:
313 |
314 | textbutton _("End Replay") action EndReplay(confirm=True)
315 |
316 | elif not main_menu:
317 |
318 | textbutton _("Main Menu") action MainMenu()
319 |
320 | textbutton _("About") action ShowMenu("about")
321 |
322 | if renpy.variant("pc") or (renpy.variant("web") and not renpy.variant("mobile")):
323 |
324 | ## Help isn't necessary or relevant to mobile devices.
325 | textbutton _("Help") action ShowMenu("help")
326 |
327 | if renpy.variant("pc"):
328 |
329 | ## The quit button is banned on iOS and unnecessary on Android and
330 | ## Web.
331 | textbutton _("Quit") action Quit(confirm=not main_menu)
332 |
333 |
334 | style navigation_button is gui_button
335 | style navigation_button_text is gui_button_text
336 |
337 | style navigation_button:
338 | size_group "navigation"
339 | properties gui.button_properties("navigation_button")
340 |
341 | style navigation_button_text:
342 | properties gui.button_text_properties("navigation_button")
343 |
344 |
345 | ## Main Menu screen ############################################################
346 | ##
347 | ## Used to display the main menu when Ren'Py starts.
348 | ##
349 | ## https://www.renpy.org/doc/html/screen_special.html#main-menu
350 |
351 | screen main_menu():
352 |
353 | ## This ensures that any other menu screen is replaced.
354 | tag menu
355 |
356 | add gui.main_menu_background
357 |
358 | ## This empty frame darkens the main menu.
359 | frame:
360 | style "main_menu_frame"
361 |
362 | ## The use statement includes another screen inside this one. The actual
363 | ## contents of the main menu are in the navigation screen.
364 | use navigation
365 |
366 | if gui.show_name:
367 |
368 | vbox:
369 | style "main_menu_vbox"
370 |
371 | text "[config.name!t]":
372 | style "main_menu_title"
373 |
374 | text "[config.version]":
375 | style "main_menu_version"
376 |
377 |
378 | style main_menu_frame is empty
379 | style main_menu_vbox is vbox
380 | style main_menu_text is gui_text
381 | style main_menu_title is main_menu_text
382 | style main_menu_version is main_menu_text
383 |
384 | style main_menu_frame:
385 | xsize 420
386 | yfill True
387 |
388 | background "gui/overlay/main_menu.png"
389 |
390 | style main_menu_vbox:
391 | xalign 1.0
392 | xoffset -30
393 | xmaximum 1200
394 | yalign 1.0
395 | yoffset -30
396 |
397 | style main_menu_text:
398 | properties gui.text_properties("main_menu", accent=True)
399 |
400 | style main_menu_title:
401 | properties gui.text_properties("title")
402 |
403 | style main_menu_version:
404 | properties gui.text_properties("version")
405 |
406 |
407 | ## Game Menu screen ############################################################
408 | ##
409 | ## This lays out the basic common structure of a game menu screen. It's called
410 | ## with the screen title, and displays the background, title, and navigation.
411 | ##
412 | ## The scroll parameter can be None, or one of "viewport" or "vpgrid". When
413 | ## this screen is intended to be used with one or more children, which are
414 | ## transcluded (placed) inside it.
415 |
416 | screen game_menu(title, scroll=None, yinitial=0.0):
417 |
418 | style_prefix "game_menu"
419 |
420 | if main_menu:
421 | add gui.main_menu_background
422 | else:
423 | add gui.game_menu_background
424 |
425 | frame:
426 | style "game_menu_outer_frame"
427 |
428 | hbox:
429 |
430 | ## Reserve space for the navigation section.
431 | frame:
432 | style "game_menu_navigation_frame"
433 |
434 | frame:
435 | style "game_menu_content_frame"
436 |
437 | if scroll == "viewport":
438 |
439 | viewport:
440 | yinitial yinitial
441 | scrollbars "vertical"
442 | mousewheel True
443 | draggable True
444 | pagekeys True
445 |
446 | side_yfill True
447 |
448 | vbox:
449 | transclude
450 |
451 | elif scroll == "vpgrid":
452 |
453 | vpgrid:
454 | cols 1
455 | yinitial yinitial
456 |
457 | scrollbars "vertical"
458 | mousewheel True
459 | draggable True
460 | pagekeys True
461 |
462 | side_yfill True
463 |
464 | transclude
465 |
466 | else:
467 |
468 | transclude
469 |
470 | use navigation
471 |
472 | textbutton _("Return"):
473 | style "return_button"
474 |
475 | action Return()
476 |
477 | label title
478 |
479 | if main_menu:
480 | key "game_menu" action ShowMenu("main_menu")
481 |
482 |
483 | style game_menu_outer_frame is empty
484 | style game_menu_navigation_frame is empty
485 | style game_menu_content_frame is empty
486 | style game_menu_viewport is gui_viewport
487 | style game_menu_side is gui_side
488 | style game_menu_scrollbar is gui_vscrollbar
489 |
490 | style game_menu_label is gui_label
491 | style game_menu_label_text is gui_label_text
492 |
493 | style return_button is navigation_button
494 | style return_button_text is navigation_button_text
495 |
496 | style game_menu_outer_frame:
497 | bottom_padding 45
498 | top_padding 180
499 |
500 | background "gui/overlay/game_menu.png"
501 |
502 | style game_menu_navigation_frame:
503 | xsize 420
504 | yfill True
505 |
506 | style game_menu_content_frame:
507 | left_margin 60
508 | right_margin 30
509 | top_margin 15
510 |
511 | style game_menu_viewport:
512 | xsize 1380
513 |
514 | style game_menu_vscrollbar:
515 | unscrollable gui.unscrollable
516 |
517 | style game_menu_side:
518 | spacing 15
519 |
520 | style game_menu_label:
521 | xpos 75
522 | ysize 180
523 |
524 | style game_menu_label_text:
525 | size gui.title_text_size
526 | color gui.accent_color
527 | yalign 0.5
528 |
529 | style return_button:
530 | xpos gui.navigation_xpos
531 | yalign 1.0
532 | yoffset -45
533 |
534 |
535 | ## About screen ################################################################
536 | ##
537 | ## This screen gives credit and copyright information about the game and Ren'Py.
538 | ##
539 | ## There's nothing special about this screen, and hence it also serves as an
540 | ## example of how to make a custom screen.
541 |
542 | screen about():
543 |
544 | tag menu
545 |
546 | ## This use statement includes the game_menu screen inside this one. The
547 | ## vbox child is then included inside the viewport inside the game_menu
548 | ## screen.
549 | use game_menu(_("About"), scroll="viewport"):
550 |
551 | style_prefix "about"
552 |
553 | vbox:
554 |
555 | label "[config.name!t]"
556 | text _("Version [config.version!t]\n")
557 |
558 | ## gui.about is usually set in options.rpy.
559 | if gui.about:
560 | text "[gui.about!t]\n"
561 |
562 | text _("Made with {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]")
563 |
564 |
565 | style about_label is gui_label
566 | style about_label_text is gui_label_text
567 | style about_text is gui_text
568 |
569 | style about_label_text:
570 | size gui.label_text_size
571 |
572 |
573 | ## Load and Save screens #######################################################
574 | ##
575 | ## These screens are responsible for letting the player save the game and load
576 | ## it again. Since they share nearly everything in common, both are implemented
577 | ## in terms of a third screen, file_slots.
578 | ##
579 | ## https://www.renpy.org/doc/html/screen_special.html#save https://
580 | ## www.renpy.org/doc/html/screen_special.html#load
581 |
582 | screen save():
583 |
584 | tag menu
585 |
586 | use file_slots(_("Save"))
587 |
588 |
589 | screen load():
590 |
591 | tag menu
592 |
593 | use file_slots(_("Load"))
594 |
595 |
596 | screen file_slots(title):
597 |
598 | default page_name_value = FilePageNameInputValue(pattern=_("Page {}"), auto=_("Automatic saves"), quick=_("Quick saves"))
599 |
600 | use game_menu(title):
601 |
602 | fixed:
603 |
604 | ## This ensures the input will get the enter event before any of the
605 | ## buttons do.
606 | order_reverse True
607 |
608 | ## The page name, which can be edited by clicking on a button.
609 | button:
610 | style "page_label"
611 |
612 | key_events True
613 | xalign 0.5
614 | action page_name_value.Toggle()
615 |
616 | input:
617 | style "page_label_text"
618 | value page_name_value
619 |
620 | ## The grid of file slots.
621 | grid gui.file_slot_cols gui.file_slot_rows:
622 | style_prefix "slot"
623 |
624 | xalign 0.5
625 | yalign 0.5
626 |
627 | spacing gui.slot_spacing
628 |
629 | for i in range(gui.file_slot_cols * gui.file_slot_rows):
630 |
631 | $ slot = i + 1
632 |
633 | button:
634 | action FileAction(slot)
635 |
636 | has vbox
637 |
638 | add FileScreenshot(slot) xalign 0.5
639 |
640 | text FileTime(slot, format=_("{#file_time}%A, %B %d %Y, %H:%M"), empty=_("empty slot")):
641 | style "slot_time_text"
642 |
643 | text FileSaveName(slot):
644 | style "slot_name_text"
645 |
646 | key "save_delete" action FileDelete(slot)
647 |
648 | ## Buttons to access other pages.
649 | hbox:
650 | style_prefix "page"
651 |
652 | xalign 0.5
653 | yalign 1.0
654 |
655 | spacing gui.page_spacing
656 |
657 | textbutton _("<") action FilePagePrevious()
658 |
659 | if config.has_autosave:
660 | textbutton _("{#auto_page}A") action FilePage("auto")
661 |
662 | if config.has_quicksave:
663 | textbutton _("{#quick_page}Q") action FilePage("quick")
664 |
665 | ## range(1, 10) gives the numbers from 1 to 9.
666 | for page in range(1, 10):
667 | textbutton "[page]" action FilePage(page)
668 |
669 | textbutton _(">") action FilePageNext()
670 |
671 |
672 | style page_label is gui_label
673 | style page_label_text is gui_label_text
674 | style page_button is gui_button
675 | style page_button_text is gui_button_text
676 |
677 | style slot_button is gui_button
678 | style slot_button_text is gui_button_text
679 | style slot_time_text is slot_button_text
680 | style slot_name_text is slot_button_text
681 |
682 | style page_label:
683 | xpadding 75
684 | ypadding 5
685 |
686 | style page_label_text:
687 | text_align 0.5
688 | layout "subtitle"
689 | hover_color gui.hover_color
690 |
691 | style page_button:
692 | properties gui.button_properties("page_button")
693 |
694 | style page_button_text:
695 | properties gui.button_text_properties("page_button")
696 |
697 | style slot_button:
698 | properties gui.button_properties("slot_button")
699 |
700 | style slot_button_text:
701 | properties gui.button_text_properties("slot_button")
702 |
703 |
704 | ## Preferences screen ##########################################################
705 | ##
706 | ## The preferences screen allows the player to configure the game to better suit
707 | ## themselves.
708 | ##
709 | ## https://www.renpy.org/doc/html/screen_special.html#preferences
710 |
711 | screen preferences():
712 |
713 | tag menu
714 |
715 | use game_menu(_("Preferences"), scroll="viewport"):
716 |
717 | vbox:
718 |
719 | hbox:
720 | box_wrap True
721 |
722 | if renpy.variant("pc") or renpy.variant("web"):
723 |
724 | vbox:
725 | style_prefix "radio"
726 | label _("Display")
727 | textbutton _("Window") action Preference("display", "window")
728 | textbutton _("Fullscreen") action Preference("display", "fullscreen")
729 |
730 | vbox:
731 | style_prefix "check"
732 | label _("Skip")
733 | textbutton _("Unseen Text") action Preference("skip", "toggle")
734 | textbutton _("After Choices") action Preference("after choices", "toggle")
735 | textbutton _("Transitions") action InvertSelected(Preference("transitions", "toggle"))
736 |
737 | ## Additional vboxes of type "radio_pref" or "check_pref" can be
738 | ## added here, to add additional creator-defined preferences.
739 |
740 | null height (4 * gui.pref_spacing)
741 |
742 | hbox:
743 | style_prefix "slider"
744 | box_wrap True
745 |
746 | vbox:
747 |
748 | label _("Text Speed")
749 |
750 | bar value Preference("text speed")
751 |
752 | label _("Auto-Forward Time")
753 |
754 | bar value Preference("auto-forward time")
755 |
756 | vbox:
757 |
758 | if config.has_music:
759 | label _("Music Volume")
760 |
761 | hbox:
762 | bar value Preference("music volume")
763 |
764 | if config.has_sound:
765 |
766 | label _("Sound Volume")
767 |
768 | hbox:
769 | bar value Preference("sound volume")
770 |
771 | if config.sample_sound:
772 | textbutton _("Test") action Play("sound", config.sample_sound)
773 |
774 |
775 | if config.has_voice:
776 | label _("Voice Volume")
777 |
778 | hbox:
779 | bar value Preference("voice volume")
780 |
781 | if config.sample_voice:
782 | textbutton _("Test") action Play("voice", config.sample_voice)
783 |
784 | if config.has_music or config.has_sound or config.has_voice:
785 | null height gui.pref_spacing
786 |
787 | textbutton _("Mute All"):
788 | action Preference("all mute", "toggle")
789 | style "mute_all_button"
790 |
791 |
792 | style pref_label is gui_label
793 | style pref_label_text is gui_label_text
794 | style pref_vbox is vbox
795 |
796 | style radio_label is pref_label
797 | style radio_label_text is pref_label_text
798 | style radio_button is gui_button
799 | style radio_button_text is gui_button_text
800 | style radio_vbox is pref_vbox
801 |
802 | style check_label is pref_label
803 | style check_label_text is pref_label_text
804 | style check_button is gui_button
805 | style check_button_text is gui_button_text
806 | style check_vbox is pref_vbox
807 |
808 | style slider_label is pref_label
809 | style slider_label_text is pref_label_text
810 | style slider_slider is gui_slider
811 | style slider_button is gui_button
812 | style slider_button_text is gui_button_text
813 | style slider_pref_vbox is pref_vbox
814 |
815 | style mute_all_button is check_button
816 | style mute_all_button_text is check_button_text
817 |
818 | style pref_label:
819 | top_margin gui.pref_spacing
820 | bottom_margin 3
821 |
822 | style pref_label_text:
823 | yalign 1.0
824 |
825 | style pref_vbox:
826 | xsize 338
827 |
828 | style radio_vbox:
829 | spacing gui.pref_button_spacing
830 |
831 | style radio_button:
832 | properties gui.button_properties("radio_button")
833 | foreground "gui/button/radio_[prefix_]foreground.png"
834 |
835 | style radio_button_text:
836 | properties gui.button_text_properties("radio_button")
837 |
838 | style check_vbox:
839 | spacing gui.pref_button_spacing
840 |
841 | style check_button:
842 | properties gui.button_properties("check_button")
843 | foreground "gui/button/check_[prefix_]foreground.png"
844 |
845 | style check_button_text:
846 | properties gui.button_text_properties("check_button")
847 |
848 | style slider_slider:
849 | xsize 525
850 |
851 | style slider_button:
852 | properties gui.button_properties("slider_button")
853 | yalign 0.5
854 | left_margin 15
855 |
856 | style slider_button_text:
857 | properties gui.button_text_properties("slider_button")
858 |
859 | style slider_vbox:
860 | xsize 675
861 |
862 |
863 | ## History screen ##############################################################
864 | ##
865 | ## This is a screen that displays the dialogue history to the player. While
866 | ## there isn't anything special about this screen, it does have to access the
867 | ## dialogue history stored in _history_list.
868 | ##
869 | ## https://www.renpy.org/doc/html/history.html
870 |
871 | screen history():
872 |
873 | tag menu
874 |
875 | ## Avoid predicting this screen, as it can be very large.
876 | predict False
877 |
878 | use game_menu(_("History"), scroll=("vpgrid" if gui.history_height else "viewport"), yinitial=1.0):
879 |
880 | style_prefix "history"
881 |
882 | for h in _history_list:
883 |
884 | window:
885 |
886 | ## This lays things out properly if history_height is None.
887 | has fixed:
888 | yfit True
889 |
890 | if h.who:
891 |
892 | label h.who:
893 | style "history_name"
894 | substitute False
895 |
896 | ## Take the color of the who text from the Character, if
897 | ## set.
898 | if "color" in h.who_args:
899 | text_color h.who_args["color"]
900 |
901 | $ what = renpy.filter_text_tags(h.what, allow=gui.history_allow_tags)
902 | text what:
903 | substitute False
904 |
905 | if not _history_list:
906 | label _("The dialogue history is empty.")
907 |
908 |
909 | ## This determines what tags are allowed to be displayed on the history screen.
910 |
911 | define gui.history_allow_tags = { "alt", "noalt", "rt", "rb", "art" }
912 |
913 |
914 | style history_window is empty
915 |
916 | style history_name is gui_label
917 | style history_name_text is gui_label_text
918 | style history_text is gui_text
919 |
920 | style history_label is gui_label
921 | style history_label_text is gui_label_text
922 |
923 | style history_window:
924 | xfill True
925 | ysize gui.history_height
926 |
927 | style history_name:
928 | xpos gui.history_name_xpos
929 | xanchor gui.history_name_xalign
930 | ypos gui.history_name_ypos
931 | xsize gui.history_name_width
932 |
933 | style history_name_text:
934 | min_width gui.history_name_width
935 | text_align gui.history_name_xalign
936 |
937 | style history_text:
938 | xpos gui.history_text_xpos
939 | ypos gui.history_text_ypos
940 | xanchor gui.history_text_xalign
941 | xsize gui.history_text_width
942 | min_width gui.history_text_width
943 | text_align gui.history_text_xalign
944 | layout ("subtitle" if gui.history_text_xalign else "tex")
945 |
946 | style history_label:
947 | xfill True
948 |
949 | style history_label_text:
950 | xalign 0.5
951 |
952 |
953 | ## Help screen #################################################################
954 | ##
955 | ## A screen that gives information about key and mouse bindings. It uses other
956 | ## screens (keyboard_help, mouse_help, and gamepad_help) to display the actual
957 | ## help.
958 |
959 | screen help():
960 |
961 | tag menu
962 |
963 | default device = "keyboard"
964 |
965 | use game_menu(_("Help"), scroll="viewport"):
966 |
967 | style_prefix "help"
968 |
969 | vbox:
970 | spacing 23
971 |
972 | hbox:
973 |
974 | textbutton _("Keyboard") action SetScreenVariable("device", "keyboard")
975 | textbutton _("Mouse") action SetScreenVariable("device", "mouse")
976 |
977 | if GamepadExists():
978 | textbutton _("Gamepad") action SetScreenVariable("device", "gamepad")
979 |
980 | if device == "keyboard":
981 | use keyboard_help
982 | elif device == "mouse":
983 | use mouse_help
984 | elif device == "gamepad":
985 | use gamepad_help
986 |
987 |
988 | screen keyboard_help():
989 |
990 | hbox:
991 | label _("Enter")
992 | text _("Advances dialogue and activates the interface.")
993 |
994 | hbox:
995 | label _("Space")
996 | text _("Advances dialogue without selecting choices.")
997 |
998 | hbox:
999 | label _("Arrow Keys")
1000 | text _("Navigate the interface.")
1001 |
1002 | hbox:
1003 | label _("Escape")
1004 | text _("Accesses the game menu.")
1005 |
1006 | hbox:
1007 | label _("Ctrl")
1008 | text _("Skips dialogue while held down.")
1009 |
1010 | hbox:
1011 | label _("Tab")
1012 | text _("Toggles dialogue skipping.")
1013 |
1014 | hbox:
1015 | label _("Page Up")
1016 | text _("Rolls back to earlier dialogue.")
1017 |
1018 | hbox:
1019 | label _("Page Down")
1020 | text _("Rolls forward to later dialogue.")
1021 |
1022 | hbox:
1023 | label "H"
1024 | text _("Hides the user interface.")
1025 |
1026 | hbox:
1027 | label "S"
1028 | text _("Takes a screenshot.")
1029 |
1030 | hbox:
1031 | label "V"
1032 | text _("Toggles assistive {a=https://www.renpy.org/l/voicing}self-voicing{/a}.")
1033 |
1034 | hbox:
1035 | label "Shift+A"
1036 | text _("Opens the accessibility menu.")
1037 |
1038 |
1039 | screen mouse_help():
1040 |
1041 | hbox:
1042 | label _("Left Click")
1043 | text _("Advances dialogue and activates the interface.")
1044 |
1045 | hbox:
1046 | label _("Middle Click")
1047 | text _("Hides the user interface.")
1048 |
1049 | hbox:
1050 | label _("Right Click")
1051 | text _("Accesses the game menu.")
1052 |
1053 | hbox:
1054 | label _("Mouse Wheel Up\nClick Rollback Side")
1055 | text _("Rolls back to earlier dialogue.")
1056 |
1057 | hbox:
1058 | label _("Mouse Wheel Down")
1059 | text _("Rolls forward to later dialogue.")
1060 |
1061 |
1062 | screen gamepad_help():
1063 |
1064 | hbox:
1065 | label _("Right Trigger\nA/Bottom Button")
1066 | text _("Advances dialogue and activates the interface.")
1067 |
1068 | hbox:
1069 | label _("Left Trigger\nLeft Shoulder")
1070 | text _("Rolls back to earlier dialogue.")
1071 |
1072 | hbox:
1073 | label _("Right Shoulder")
1074 | text _("Rolls forward to later dialogue.")
1075 |
1076 |
1077 | hbox:
1078 | label _("D-Pad, Sticks")
1079 | text _("Navigate the interface.")
1080 |
1081 | hbox:
1082 | label _("Start, Guide")
1083 | text _("Accesses the game menu.")
1084 |
1085 | hbox:
1086 | label _("Y/Top Button")
1087 | text _("Hides the user interface.")
1088 |
1089 | textbutton _("Calibrate") action GamepadCalibrate()
1090 |
1091 |
1092 | style help_button is gui_button
1093 | style help_button_text is gui_button_text
1094 | style help_label is gui_label
1095 | style help_label_text is gui_label_text
1096 | style help_text is gui_text
1097 |
1098 | style help_button:
1099 | properties gui.button_properties("help_button")
1100 | xmargin 12
1101 |
1102 | style help_button_text:
1103 | properties gui.button_text_properties("help_button")
1104 |
1105 | style help_label:
1106 | xsize 375
1107 | right_padding 30
1108 |
1109 | style help_label_text:
1110 | size gui.text_size
1111 | xalign 1.0
1112 | text_align 1.0
1113 |
1114 |
1115 |
1116 | ################################################################################
1117 | ## Additional screens
1118 | ################################################################################
1119 |
1120 |
1121 | ## Confirm screen ##############################################################
1122 | ##
1123 | ## The confirm screen is called when Ren'Py wants to ask the player a yes or no
1124 | ## question.
1125 | ##
1126 | ## https://www.renpy.org/doc/html/screen_special.html#confirm
1127 |
1128 | screen confirm(message, yes_action, no_action):
1129 |
1130 | ## Ensure other screens do not get input while this screen is displayed.
1131 | modal True
1132 |
1133 | zorder 200
1134 |
1135 | style_prefix "confirm"
1136 |
1137 | add "gui/overlay/confirm.png"
1138 |
1139 | frame:
1140 |
1141 | vbox:
1142 | xalign .5
1143 | yalign .5
1144 | spacing 45
1145 |
1146 | label _(message):
1147 | style "confirm_prompt"
1148 | xalign 0.5
1149 |
1150 | hbox:
1151 | xalign 0.5
1152 | spacing 150
1153 |
1154 | textbutton _("Yes") action yes_action
1155 | textbutton _("No") action no_action
1156 |
1157 | ## Right-click and escape answer "no".
1158 | key "game_menu" action no_action
1159 |
1160 |
1161 | style confirm_frame is gui_frame
1162 | style confirm_prompt is gui_prompt
1163 | style confirm_prompt_text is gui_prompt_text
1164 | style confirm_button is gui_medium_button
1165 | style confirm_button_text is gui_medium_button_text
1166 |
1167 | style confirm_frame:
1168 | background Frame([ "gui/confirm_frame.png", "gui/frame.png"], gui.confirm_frame_borders, tile=gui.frame_tile)
1169 | padding gui.confirm_frame_borders.padding
1170 | xalign .5
1171 | yalign .5
1172 |
1173 | style confirm_prompt_text:
1174 | text_align 0.5
1175 | layout "subtitle"
1176 |
1177 | style confirm_button:
1178 | properties gui.button_properties("confirm_button")
1179 |
1180 | style confirm_button_text:
1181 | properties gui.button_text_properties("confirm_button")
1182 |
1183 |
1184 | ## Skip indicator screen #######################################################
1185 | ##
1186 | ## The skip_indicator screen is displayed to indicate that skipping is in
1187 | ## progress.
1188 | ##
1189 | ## https://www.renpy.org/doc/html/screen_special.html#skip-indicator
1190 |
1191 | screen skip_indicator():
1192 |
1193 | zorder 100
1194 | style_prefix "skip"
1195 |
1196 | frame:
1197 |
1198 | hbox:
1199 | spacing 9
1200 |
1201 | text _("Skipping")
1202 |
1203 | text "▸" at delayed_blink(0.0, 1.0) style "skip_triangle"
1204 | text "▸" at delayed_blink(0.2, 1.0) style "skip_triangle"
1205 | text "▸" at delayed_blink(0.4, 1.0) style "skip_triangle"
1206 |
1207 |
1208 | ## This transform is used to blink the arrows one after another.
1209 | transform delayed_blink(delay, cycle):
1210 | alpha .5
1211 |
1212 | pause delay
1213 |
1214 | block:
1215 | linear .2 alpha 1.0
1216 | pause .2
1217 | linear .2 alpha 0.5
1218 | pause (cycle - .4)
1219 | repeat
1220 |
1221 |
1222 | style skip_frame is empty
1223 | style skip_text is gui_text
1224 | style skip_triangle is skip_text
1225 |
1226 | style skip_frame:
1227 | ypos gui.skip_ypos
1228 | background Frame("gui/skip.png", gui.skip_frame_borders, tile=gui.frame_tile)
1229 | padding gui.skip_frame_borders.padding
1230 |
1231 | style skip_text:
1232 | size gui.notify_text_size
1233 |
1234 | style skip_triangle:
1235 | ## We have to use a font that has the BLACK RIGHT-POINTING SMALL TRIANGLE
1236 | ## glyph in it.
1237 | font "DejaVuSans.ttf"
1238 |
1239 |
1240 | ## Notify screen ###############################################################
1241 | ##
1242 | ## The notify screen is used to show the player a message. (For example, when
1243 | ## the game is quicksaved or a screenshot has been taken.)
1244 | ##
1245 | ## https://www.renpy.org/doc/html/screen_special.html#notify-screen
1246 |
1247 | screen notify(message):
1248 |
1249 | zorder 100
1250 | style_prefix "notify"
1251 |
1252 | frame at notify_appear:
1253 | text "[message!tq]"
1254 |
1255 | timer 3.25 action Hide('notify')
1256 |
1257 |
1258 | transform notify_appear:
1259 | on show:
1260 | alpha 0
1261 | linear .25 alpha 1.0
1262 | on hide:
1263 | linear .5 alpha 0.0
1264 |
1265 |
1266 | style notify_frame is empty
1267 | style notify_text is gui_text
1268 |
1269 | style notify_frame:
1270 | ypos gui.notify_ypos
1271 |
1272 | background Frame("gui/notify.png", gui.notify_frame_borders, tile=gui.frame_tile)
1273 | padding gui.notify_frame_borders.padding
1274 |
1275 | style notify_text:
1276 | properties gui.text_properties("notify")
1277 |
1278 |
1279 | ## NVL screen ##################################################################
1280 | ##
1281 | ## This screen is used for NVL-mode dialogue and menus.
1282 | ##
1283 | ## https://www.renpy.org/doc/html/screen_special.html#nvl
1284 |
1285 |
1286 | screen nvl(dialogue, items=None):
1287 |
1288 | window:
1289 | style "nvl_window"
1290 |
1291 | has vbox:
1292 | spacing gui.nvl_spacing
1293 |
1294 | ## Displays dialogue in either a vpgrid or the vbox.
1295 | if gui.nvl_height:
1296 |
1297 | vpgrid:
1298 | cols 1
1299 | yinitial 1.0
1300 |
1301 | use nvl_dialogue(dialogue)
1302 |
1303 | else:
1304 |
1305 | use nvl_dialogue(dialogue)
1306 |
1307 | ## Displays the menu, if given. The menu may be displayed incorrectly if
1308 | ## config.narrator_menu is set to True.
1309 | for i in items:
1310 |
1311 | textbutton i.caption:
1312 | action i.action
1313 | style "nvl_button"
1314 |
1315 | add SideImage() xalign 0.0 yalign 1.0
1316 |
1317 |
1318 | screen nvl_dialogue(dialogue):
1319 |
1320 | for d in dialogue:
1321 |
1322 | window:
1323 | id d.window_id
1324 |
1325 | fixed:
1326 | yfit gui.nvl_height is None
1327 |
1328 | if d.who is not None:
1329 |
1330 | text d.who:
1331 | id d.who_id
1332 |
1333 | text d.what:
1334 | id d.what_id
1335 |
1336 |
1337 | ## This controls the maximum number of NVL-mode entries that can be displayed at
1338 | ## once.
1339 | define config.nvl_list_length = gui.nvl_list_length
1340 |
1341 | style nvl_window is default
1342 | style nvl_entry is default
1343 |
1344 | style nvl_label is say_label
1345 | style nvl_dialogue is say_dialogue
1346 |
1347 | style nvl_button is button
1348 | style nvl_button_text is button_text
1349 |
1350 | style nvl_window:
1351 | xfill True
1352 | yfill True
1353 |
1354 | background "gui/nvl.png"
1355 | padding gui.nvl_borders.padding
1356 |
1357 | style nvl_entry:
1358 | xfill True
1359 | ysize gui.nvl_height
1360 |
1361 | style nvl_label:
1362 | xpos gui.nvl_name_xpos
1363 | xanchor gui.nvl_name_xalign
1364 | ypos gui.nvl_name_ypos
1365 | yanchor 0.0
1366 | xsize gui.nvl_name_width
1367 | min_width gui.nvl_name_width
1368 | text_align gui.nvl_name_xalign
1369 |
1370 | style nvl_dialogue:
1371 | xpos gui.nvl_text_xpos
1372 | xanchor gui.nvl_text_xalign
1373 | ypos gui.nvl_text_ypos
1374 | xsize gui.nvl_text_width
1375 | min_width gui.nvl_text_width
1376 | text_align gui.nvl_text_xalign
1377 | layout ("subtitle" if gui.nvl_text_xalign else "tex")
1378 |
1379 | style nvl_thought:
1380 | xpos gui.nvl_thought_xpos
1381 | xanchor gui.nvl_thought_xalign
1382 | ypos gui.nvl_thought_ypos
1383 | xsize gui.nvl_thought_width
1384 | min_width gui.nvl_thought_width
1385 | text_align gui.nvl_thought_xalign
1386 | layout ("subtitle" if gui.nvl_text_xalign else "tex")
1387 |
1388 | style nvl_button:
1389 | properties gui.button_properties("nvl_button")
1390 | xpos gui.nvl_button_xpos
1391 | xanchor gui.nvl_button_xalign
1392 |
1393 | style nvl_button_text:
1394 | properties gui.button_text_properties("nvl_button")
1395 |
1396 |
1397 |
1398 | ################################################################################
1399 | ## Mobile Variants
1400 | ################################################################################
1401 |
1402 | style pref_vbox:
1403 | variant "medium"
1404 | xsize 675
1405 |
1406 | ## Since a mouse may not be present, we replace the quick menu with a version
1407 | ## that uses fewer and bigger buttons that are easier to touch.
1408 | screen quick_menu():
1409 | variant "touch"
1410 |
1411 | zorder 100
1412 |
1413 | if quick_menu:
1414 |
1415 | hbox:
1416 | style_prefix "quick"
1417 |
1418 | xalign 0.5
1419 | yalign 1.0
1420 |
1421 | textbutton _("Back") action Rollback()
1422 | textbutton _("Skip") action Skip() alternate Skip(fast=True, confirm=True)
1423 | textbutton _("Auto") action Preference("auto-forward", "toggle")
1424 | textbutton _("Menu") action ShowMenu()
1425 |
1426 |
1427 | style window:
1428 | variant "small"
1429 | background "gui/phone/textbox.png"
1430 |
1431 | style radio_button:
1432 | variant "small"
1433 | foreground "gui/phone/button/radio_[prefix_]foreground.png"
1434 |
1435 | style check_button:
1436 | variant "small"
1437 | foreground "gui/phone/button/check_[prefix_]foreground.png"
1438 |
1439 | style nvl_window:
1440 | variant "small"
1441 | background "gui/phone/nvl.png"
1442 |
1443 | style main_menu_frame:
1444 | variant "small"
1445 | background "gui/phone/overlay/main_menu.png"
1446 |
1447 | style game_menu_outer_frame:
1448 | variant "small"
1449 | background "gui/phone/overlay/game_menu.png"
1450 |
1451 | style game_menu_navigation_frame:
1452 | variant "small"
1453 | xsize 510
1454 |
1455 | style game_menu_content_frame:
1456 | variant "small"
1457 | top_margin 0
1458 |
1459 | style pref_vbox:
1460 | variant "small"
1461 | xsize 600
1462 |
1463 | style bar:
1464 | variant "small"
1465 | ysize gui.bar_size
1466 | left_bar Frame("gui/phone/bar/left.png", gui.bar_borders, tile=gui.bar_tile)
1467 | right_bar Frame("gui/phone/bar/right.png", gui.bar_borders, tile=gui.bar_tile)
1468 |
1469 | style vbar:
1470 | variant "small"
1471 | xsize gui.bar_size
1472 | top_bar Frame("gui/phone/bar/top.png", gui.vbar_borders, tile=gui.bar_tile)
1473 | bottom_bar Frame("gui/phone/bar/bottom.png", gui.vbar_borders, tile=gui.bar_tile)
1474 |
1475 | style scrollbar:
1476 | variant "small"
1477 | ysize gui.scrollbar_size
1478 | base_bar Frame("gui/phone/scrollbar/horizontal_[prefix_]bar.png", gui.scrollbar_borders, tile=gui.scrollbar_tile)
1479 | thumb Frame("gui/phone/scrollbar/horizontal_[prefix_]thumb.png", gui.scrollbar_borders, tile=gui.scrollbar_tile)
1480 |
1481 | style vscrollbar:
1482 | variant "small"
1483 | xsize gui.scrollbar_size
1484 | base_bar Frame("gui/phone/scrollbar/vertical_[prefix_]bar.png", gui.vscrollbar_borders, tile=gui.scrollbar_tile)
1485 | thumb Frame("gui/phone/scrollbar/vertical_[prefix_]thumb.png", gui.vscrollbar_borders, tile=gui.scrollbar_tile)
1486 |
1487 | style slider:
1488 | variant "small"
1489 | ysize gui.slider_size
1490 | base_bar Frame("gui/phone/slider/horizontal_[prefix_]bar.png", gui.slider_borders, tile=gui.slider_tile)
1491 | thumb "gui/phone/slider/horizontal_[prefix_]thumb.png"
1492 |
1493 | style vslider:
1494 | variant "small"
1495 | xsize gui.slider_size
1496 | base_bar Frame("gui/phone/slider/vertical_[prefix_]bar.png", gui.vslider_borders, tile=gui.slider_tile)
1497 | thumb "gui/phone/slider/vertical_[prefix_]thumb.png"
1498 |
1499 | style slider_vbox:
1500 | variant "small"
1501 | xsize None
1502 |
1503 | style slider_slider:
1504 | variant "small"
1505 | xsize 900
1506 |
--------------------------------------------------------------------------------
/game/screens.rpyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/screens.rpyc
--------------------------------------------------------------------------------
/game/script.rpy:
--------------------------------------------------------------------------------
1 | # The script of the game goes in this file.
2 |
3 |
4 | # The game starts here.
5 |
6 | label start:
7 |
8 | define m = Character("Game Master")
9 |
10 | m "Welcome to ChatGPTExample, please start by inputing your OpenAI API key"
11 |
12 | m "To find it search 'Where do I find my Secret OPENAI API Key?' on Google. Note that you need to create an OPENAI account for that."
13 |
14 | python:
15 | #We get the API Key from the User. Because you should NEVER give your API key in any form with your game let alone share it on a public repository
16 | #How to distribute your game with an embbed API KEY ? I'll soon make a special server system to make it possible
17 | apikey = renpy.input("What is your OPENAI API Key? (leave empty if you don't have any)", length=64)
18 |
19 | m "Oki let's go !"
20 |
21 |
22 | define e = Character("Eileen")
23 |
24 | # Show a background. This uses a placeholder by default, but you can
25 | # add a file (named either "bg room.png" or "bg room.jpg") to the
26 | # images directory to show it.
27 |
28 | scene bg room
29 |
30 | # This shows a character sprite. A placeholder is used, but you can
31 | # replace it by adding a file named "eileen happy.png" to the images
32 | # directory.
33 |
34 | show eileen happy
35 |
36 | e "Hello there, my name is Eileen, I am so happy to see you ! Hihihi"
37 |
38 | python:
39 | import chatgpt
40 |
41 | #The "system" message is the initial prompt of your NPC
42 | #Messages with "assistant" are messages from the NPC, here there's a first message so we add it to the list of messages already said by the NPC
43 | messages = [
44 | {"role": "system", "content": "You are Eileen, a tennage student enrolled at Miskatonic Univeristy of Arkham. You are secretly in love with the user. You laugh very frequently and finish your sentences with 'Hihihi'"},
45 | {"role": "assistant", "content": "Hello there, my name is Eileen, who are you ?"}
46 | ]
47 |
48 | while True:
49 | #We ask the user for an input
50 | user_input = renpy.input("What do you say ?", length=1000)
51 | #Then add it in the "history" of messages
52 | messages.append(
53 | {"role": "user", "content": user_input}
54 | )
55 |
56 | if apikey != '':
57 | #We ask ChatGPT to "complete" the conversation by adding a response
58 | #If you have an API key, let's use that
59 | messages = chatgpt.completion(messages,api_key=apikey)
60 | else :
61 | #If you don't provide an API key, we'll use my proxy
62 | #This proxy only allows a set of NPCs, and serves to "hide" my API key
63 | #Check the README.md to know more about it
64 | #Of course if you modify the NPC in any way, it won't work, you'll have to use your own API key instead.
65 | messages = chatgpt.completion(messages,proxy="http://prima.wiki/proxy.php")
66 |
67 | #Here we only care about the response from the NPC
68 | response = messages[-1]["content"]
69 | #So we display just that
70 | e("[response]")
71 |
72 | return
73 |
--------------------------------------------------------------------------------
/game/script.rpyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Taiko3615/RenPyChatGPTExample/1217376c1a4fca62c86dbf65e0d900900d5bd78d/game/script.rpyc
--------------------------------------------------------------------------------
/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:138
53 | old "Font Override"
54 | new "Font Override"
55 |
56 | # renpy/common/00accessibility.rpy:142
57 | old "Default"
58 | new "Default"
59 |
60 | # renpy/common/00accessibility.rpy:146
61 | old "DejaVu Sans"
62 | new "DejaVu Sans"
63 |
64 | # renpy/common/00accessibility.rpy:150
65 | old "Opendyslexic"
66 | new "Opendyslexic"
67 |
68 | # renpy/common/00accessibility.rpy:156
69 | old "Text Size Scaling"
70 | new "Text Size Scaling"
71 |
72 | # renpy/common/00accessibility.rpy:162
73 | old "Reset"
74 | new "Reset"
75 |
76 | # renpy/common/00accessibility.rpy:168
77 | old "Line Spacing Scaling"
78 | new "Line Spacing Scaling"
79 |
80 | # renpy/common/00accessibility.rpy:180
81 | old "High Contrast Text"
82 | new "High Contrast Text"
83 |
84 | # renpy/common/00accessibility.rpy:182
85 | old "Enable"
86 | new "Enable"
87 |
88 | # renpy/common/00accessibility.rpy:186
89 | old "Disable"
90 | new "Disable"
91 |
92 | # renpy/common/00accessibility.rpy:193
93 | old "Self-Voicing"
94 | new "Self-Voicing"
95 |
96 | # renpy/common/00accessibility.rpy:197
97 | old "Off"
98 | new "Off"
99 |
100 | # renpy/common/00accessibility.rpy:201
101 | old "Text-to-speech"
102 | new "Text-to-speech"
103 |
104 | # renpy/common/00accessibility.rpy:205
105 | old "Clipboard"
106 | new "Clipboard"
107 |
108 | # renpy/common/00accessibility.rpy:209
109 | old "Debug"
110 | new "Debug"
111 |
112 | # renpy/common/00accessibility.rpy:215
113 | old "Self-Voicing Volume Drop"
114 | new "Self-Voicing Volume Drop"
115 |
116 | # renpy/common/00accessibility.rpy:224
117 | 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."
118 | 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."
119 |
120 | # renpy/common/00accessibility.rpy:229
121 | old "Return"
122 | new "Return"
123 |
124 | # renpy/common/00action_file.rpy:26
125 | old "{#weekday}Monday"
126 | new "{#weekday}Monday"
127 |
128 | # renpy/common/00action_file.rpy:26
129 | old "{#weekday}Tuesday"
130 | new "{#weekday}Tuesday"
131 |
132 | # renpy/common/00action_file.rpy:26
133 | old "{#weekday}Wednesday"
134 | new "{#weekday}Wednesday"
135 |
136 | # renpy/common/00action_file.rpy:26
137 | old "{#weekday}Thursday"
138 | new "{#weekday}Thursday"
139 |
140 | # renpy/common/00action_file.rpy:26
141 | old "{#weekday}Friday"
142 | new "{#weekday}Friday"
143 |
144 | # renpy/common/00action_file.rpy:26
145 | old "{#weekday}Saturday"
146 | new "{#weekday}Saturday"
147 |
148 | # renpy/common/00action_file.rpy:26
149 | old "{#weekday}Sunday"
150 | new "{#weekday}Sunday"
151 |
152 | # renpy/common/00action_file.rpy:37
153 | old "{#weekday_short}Mon"
154 | new "{#weekday_short}Mon"
155 |
156 | # renpy/common/00action_file.rpy:37
157 | old "{#weekday_short}Tue"
158 | new "{#weekday_short}Tue"
159 |
160 | # renpy/common/00action_file.rpy:37
161 | old "{#weekday_short}Wed"
162 | new "{#weekday_short}Wed"
163 |
164 | # renpy/common/00action_file.rpy:37
165 | old "{#weekday_short}Thu"
166 | new "{#weekday_short}Thu"
167 |
168 | # renpy/common/00action_file.rpy:37
169 | old "{#weekday_short}Fri"
170 | new "{#weekday_short}Fri"
171 |
172 | # renpy/common/00action_file.rpy:37
173 | old "{#weekday_short}Sat"
174 | new "{#weekday_short}Sat"
175 |
176 | # renpy/common/00action_file.rpy:37
177 | old "{#weekday_short}Sun"
178 | new "{#weekday_short}Sun"
179 |
180 | # renpy/common/00action_file.rpy:47
181 | old "{#month}January"
182 | new "{#month}January"
183 |
184 | # renpy/common/00action_file.rpy:47
185 | old "{#month}February"
186 | new "{#month}February"
187 |
188 | # renpy/common/00action_file.rpy:47
189 | old "{#month}March"
190 | new "{#month}March"
191 |
192 | # renpy/common/00action_file.rpy:47
193 | old "{#month}April"
194 | new "{#month}April"
195 |
196 | # renpy/common/00action_file.rpy:47
197 | old "{#month}May"
198 | new "{#month}May"
199 |
200 | # renpy/common/00action_file.rpy:47
201 | old "{#month}June"
202 | new "{#month}June"
203 |
204 | # renpy/common/00action_file.rpy:47
205 | old "{#month}July"
206 | new "{#month}July"
207 |
208 | # renpy/common/00action_file.rpy:47
209 | old "{#month}August"
210 | new "{#month}August"
211 |
212 | # renpy/common/00action_file.rpy:47
213 | old "{#month}September"
214 | new "{#month}September"
215 |
216 | # renpy/common/00action_file.rpy:47
217 | old "{#month}October"
218 | new "{#month}October"
219 |
220 | # renpy/common/00action_file.rpy:47
221 | old "{#month}November"
222 | new "{#month}November"
223 |
224 | # renpy/common/00action_file.rpy:47
225 | old "{#month}December"
226 | new "{#month}December"
227 |
228 | # renpy/common/00action_file.rpy:63
229 | old "{#month_short}Jan"
230 | new "{#month_short}Jan"
231 |
232 | # renpy/common/00action_file.rpy:63
233 | old "{#month_short}Feb"
234 | new "{#month_short}Feb"
235 |
236 | # renpy/common/00action_file.rpy:63
237 | old "{#month_short}Mar"
238 | new "{#month_short}Mar"
239 |
240 | # renpy/common/00action_file.rpy:63
241 | old "{#month_short}Apr"
242 | new "{#month_short}Apr"
243 |
244 | # renpy/common/00action_file.rpy:63
245 | old "{#month_short}May"
246 | new "{#month_short}May"
247 |
248 | # renpy/common/00action_file.rpy:63
249 | old "{#month_short}Jun"
250 | new "{#month_short}Jun"
251 |
252 | # renpy/common/00action_file.rpy:63
253 | old "{#month_short}Jul"
254 | new "{#month_short}Jul"
255 |
256 | # renpy/common/00action_file.rpy:63
257 | old "{#month_short}Aug"
258 | new "{#month_short}Aug"
259 |
260 | # renpy/common/00action_file.rpy:63
261 | old "{#month_short}Sep"
262 | new "{#month_short}Sep"
263 |
264 | # renpy/common/00action_file.rpy:63
265 | old "{#month_short}Oct"
266 | new "{#month_short}Oct"
267 |
268 | # renpy/common/00action_file.rpy:63
269 | old "{#month_short}Nov"
270 | new "{#month_short}Nov"
271 |
272 | # renpy/common/00action_file.rpy:63
273 | old "{#month_short}Dec"
274 | new "{#month_short}Dec"
275 |
276 | # renpy/common/00action_file.rpy:250
277 | old "%b %d, %H:%M"
278 | new "%b %d, %H:%M"
279 |
280 | # renpy/common/00action_file.rpy:364
281 | old "Save slot %s: [text]"
282 | new "Save slot %s: [text]"
283 |
284 | # renpy/common/00action_file.rpy:445
285 | old "Load slot %s: [text]"
286 | new "Load slot %s: [text]"
287 |
288 | # renpy/common/00action_file.rpy:498
289 | old "Delete slot [text]"
290 | new "Delete slot [text]"
291 |
292 | # renpy/common/00action_file.rpy:577
293 | old "File page auto"
294 | new "File page auto"
295 |
296 | # renpy/common/00action_file.rpy:579
297 | old "File page quick"
298 | new "File page quick"
299 |
300 | # renpy/common/00action_file.rpy:581
301 | old "File page [text]"
302 | new "File page [text]"
303 |
304 | # renpy/common/00action_file.rpy:639
305 | old "Page {}"
306 | new "Page {}"
307 |
308 | # renpy/common/00action_file.rpy:639
309 | old "Automatic saves"
310 | new "Automatic saves"
311 |
312 | # renpy/common/00action_file.rpy:639
313 | old "Quick saves"
314 | new "Quick saves"
315 |
316 | # renpy/common/00action_file.rpy:780
317 | old "Next file page."
318 | new "Next file page."
319 |
320 | # renpy/common/00action_file.rpy:852
321 | old "Previous file page."
322 | new "Previous file page."
323 |
324 | # renpy/common/00action_file.rpy:913
325 | old "Quick save complete."
326 | new "Quick save complete."
327 |
328 | # renpy/common/00action_file.rpy:931
329 | old "Quick save."
330 | new "Quick save."
331 |
332 | # renpy/common/00action_file.rpy:950
333 | old "Quick load."
334 | new "Quick load."
335 |
336 | # renpy/common/00action_other.rpy:381
337 | old "Language [text]"
338 | new "Language [text]"
339 |
340 | # renpy/common/00action_other.rpy:703
341 | old "Open [text] directory."
342 | new "Open [text] directory."
343 |
344 | # renpy/common/00director.rpy:708
345 | old "The interactive director is not enabled here."
346 | new "The interactive director is not enabled here."
347 |
348 | # renpy/common/00director.rpy:1481
349 | old "⬆"
350 | new "⬆"
351 |
352 | # renpy/common/00director.rpy:1487
353 | old "⬇"
354 | new "⬇"
355 |
356 | # renpy/common/00director.rpy:1551
357 | old "Done"
358 | new "Done"
359 |
360 | # renpy/common/00director.rpy:1561
361 | old "(statement)"
362 | new "(statement)"
363 |
364 | # renpy/common/00director.rpy:1562
365 | old "(tag)"
366 | new "(tag)"
367 |
368 | # renpy/common/00director.rpy:1563
369 | old "(attributes)"
370 | new "(attributes)"
371 |
372 | # renpy/common/00director.rpy:1564
373 | old "(transform)"
374 | new "(transform)"
375 |
376 | # renpy/common/00director.rpy:1589
377 | old "(transition)"
378 | new "(transition)"
379 |
380 | # renpy/common/00director.rpy:1601
381 | old "(channel)"
382 | new "(channel)"
383 |
384 | # renpy/common/00director.rpy:1602
385 | old "(filename)"
386 | new "(filename)"
387 |
388 | # renpy/common/00director.rpy:1631
389 | old "Change"
390 | new "Change"
391 |
392 | # renpy/common/00director.rpy:1633
393 | old "Add"
394 | new "Add"
395 |
396 | # renpy/common/00director.rpy:1636
397 | old "Cancel"
398 | new "Cancel"
399 |
400 | # renpy/common/00director.rpy:1639
401 | old "Remove"
402 | new "Remove"
403 |
404 | # renpy/common/00director.rpy:1674
405 | old "Statement:"
406 | new "Statement:"
407 |
408 | # renpy/common/00director.rpy:1695
409 | old "Tag:"
410 | new "Tag:"
411 |
412 | # renpy/common/00director.rpy:1711
413 | old "Attributes:"
414 | new "Attributes:"
415 |
416 | # renpy/common/00director.rpy:1729
417 | old "Transforms:"
418 | new "Transforms:"
419 |
420 | # renpy/common/00director.rpy:1748
421 | old "Behind:"
422 | new "Behind:"
423 |
424 | # renpy/common/00director.rpy:1767
425 | old "Transition:"
426 | new "Transition:"
427 |
428 | # renpy/common/00director.rpy:1785
429 | old "Channel:"
430 | new "Channel:"
431 |
432 | # renpy/common/00director.rpy:1803
433 | old "Audio Filename:"
434 | new "Audio Filename:"
435 |
436 | # renpy/common/00gui.rpy:445
437 | old "Are you sure?"
438 | new "Are you sure?"
439 |
440 | # renpy/common/00gui.rpy:446
441 | old "Are you sure you want to delete this save?"
442 | new "Are you sure you want to delete this save?"
443 |
444 | # renpy/common/00gui.rpy:447
445 | old "Are you sure you want to overwrite your save?"
446 | new "Are you sure you want to overwrite your save?"
447 |
448 | # renpy/common/00gui.rpy:448
449 | old "Loading will lose unsaved progress.\nAre you sure you want to do this?"
450 | new "Loading will lose unsaved progress.\nAre you sure you want to do this?"
451 |
452 | # renpy/common/00gui.rpy:449
453 | old "Are you sure you want to quit?"
454 | new "Are you sure you want to quit?"
455 |
456 | # renpy/common/00gui.rpy:450
457 | old "Are you sure you want to return to the main menu?\nThis will lose unsaved progress."
458 | new "Are you sure you want to return to the main menu?\nThis will lose unsaved progress."
459 |
460 | # renpy/common/00gui.rpy:451
461 | old "Are you sure you want to end the replay?"
462 | new "Are you sure you want to end the replay?"
463 |
464 | # renpy/common/00gui.rpy:452
465 | old "Are you sure you want to begin skipping?"
466 | new "Are you sure you want to begin skipping?"
467 |
468 | # renpy/common/00gui.rpy:453
469 | old "Are you sure you want to skip to the next choice?"
470 | new "Are you sure you want to skip to the next choice?"
471 |
472 | # renpy/common/00gui.rpy:454
473 | old "Are you sure you want to skip unseen dialogue to the next choice?"
474 | new "Are you sure you want to skip unseen dialogue to the next choice?"
475 |
476 | # renpy/common/00keymap.rpy:310
477 | old "Failed to save screenshot as %s."
478 | new "Failed to save screenshot as %s."
479 |
480 | # renpy/common/00keymap.rpy:322
481 | old "Saved screenshot as %s."
482 | new "Saved screenshot as %s."
483 |
484 | # renpy/common/00library.rpy:230
485 | old "Skip Mode"
486 | new "Skip Mode"
487 |
488 | # renpy/common/00library.rpy:316
489 | 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}."
490 | 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}."
491 |
492 | # renpy/common/00preferences.rpy:259
493 | old "display"
494 | new "display"
495 |
496 | # renpy/common/00preferences.rpy:271
497 | old "transitions"
498 | new "transitions"
499 |
500 | # renpy/common/00preferences.rpy:280
501 | old "skip transitions"
502 | new "skip transitions"
503 |
504 | # renpy/common/00preferences.rpy:282
505 | old "video sprites"
506 | new "video sprites"
507 |
508 | # renpy/common/00preferences.rpy:291
509 | old "show empty window"
510 | new "show empty window"
511 |
512 | # renpy/common/00preferences.rpy:300
513 | old "text speed"
514 | new "text speed"
515 |
516 | # renpy/common/00preferences.rpy:308
517 | old "joystick"
518 | new "joystick"
519 |
520 | # renpy/common/00preferences.rpy:308
521 | old "joystick..."
522 | new "joystick..."
523 |
524 | # renpy/common/00preferences.rpy:315
525 | old "skip"
526 | new "skip"
527 |
528 | # renpy/common/00preferences.rpy:318
529 | old "skip unseen [text]"
530 | new "skip unseen [text]"
531 |
532 | # renpy/common/00preferences.rpy:323
533 | old "skip unseen text"
534 | new "skip unseen text"
535 |
536 | # renpy/common/00preferences.rpy:325
537 | old "begin skipping"
538 | new "begin skipping"
539 |
540 | # renpy/common/00preferences.rpy:329
541 | old "after choices"
542 | new "after choices"
543 |
544 | # renpy/common/00preferences.rpy:336
545 | old "skip after choices"
546 | new "skip after choices"
547 |
548 | # renpy/common/00preferences.rpy:338
549 | old "auto-forward time"
550 | new "auto-forward time"
551 |
552 | # renpy/common/00preferences.rpy:352
553 | old "auto-forward"
554 | new "auto-forward"
555 |
556 | # renpy/common/00preferences.rpy:359
557 | old "Auto forward"
558 | new "Auto forward"
559 |
560 | # renpy/common/00preferences.rpy:362
561 | old "auto-forward after click"
562 | new "auto-forward after click"
563 |
564 | # renpy/common/00preferences.rpy:371
565 | old "automatic move"
566 | new "automatic move"
567 |
568 | # renpy/common/00preferences.rpy:380
569 | old "wait for voice"
570 | new "wait for voice"
571 |
572 | # renpy/common/00preferences.rpy:389
573 | old "voice sustain"
574 | new "voice sustain"
575 |
576 | # renpy/common/00preferences.rpy:398
577 | old "self voicing"
578 | new "self voicing"
579 |
580 | # renpy/common/00preferences.rpy:407
581 | old "self voicing volume drop"
582 | new "self voicing volume drop"
583 |
584 | # renpy/common/00preferences.rpy:415
585 | old "clipboard voicing"
586 | new "clipboard voicing"
587 |
588 | # renpy/common/00preferences.rpy:424
589 | old "debug voicing"
590 | new "debug voicing"
591 |
592 | # renpy/common/00preferences.rpy:433
593 | old "emphasize audio"
594 | new "emphasize audio"
595 |
596 | # renpy/common/00preferences.rpy:442
597 | old "rollback side"
598 | new "rollback side"
599 |
600 | # renpy/common/00preferences.rpy:452
601 | old "gl powersave"
602 | new "gl powersave"
603 |
604 | # renpy/common/00preferences.rpy:458
605 | old "gl framerate"
606 | new "gl framerate"
607 |
608 | # renpy/common/00preferences.rpy:461
609 | old "gl tearing"
610 | new "gl tearing"
611 |
612 | # renpy/common/00preferences.rpy:464
613 | old "font transform"
614 | new "font transform"
615 |
616 | # renpy/common/00preferences.rpy:467
617 | old "font size"
618 | new "font size"
619 |
620 | # renpy/common/00preferences.rpy:475
621 | old "font line spacing"
622 | new "font line spacing"
623 |
624 | # renpy/common/00preferences.rpy:483
625 | old "system cursor"
626 | new "system cursor"
627 |
628 | # renpy/common/00preferences.rpy:492
629 | old "renderer menu"
630 | new "renderer menu"
631 |
632 | # renpy/common/00preferences.rpy:495
633 | old "accessibility menu"
634 | new "accessibility menu"
635 |
636 | # renpy/common/00preferences.rpy:498
637 | old "high contrast text"
638 | new "high contrast text"
639 |
640 | # renpy/common/00preferences.rpy:507
641 | old "audio when minimized"
642 | new "audio when minimized"
643 |
644 | # renpy/common/00preferences.rpy:527
645 | old "main volume"
646 | new "main volume"
647 |
648 | # renpy/common/00preferences.rpy:528
649 | old "music volume"
650 | new "music volume"
651 |
652 | # renpy/common/00preferences.rpy:529
653 | old "sound volume"
654 | new "sound volume"
655 |
656 | # renpy/common/00preferences.rpy:530
657 | old "voice volume"
658 | new "voice volume"
659 |
660 | # renpy/common/00preferences.rpy:531
661 | old "mute main"
662 | new "mute main"
663 |
664 | # renpy/common/00preferences.rpy:532
665 | old "mute music"
666 | new "mute music"
667 |
668 | # renpy/common/00preferences.rpy:533
669 | old "mute sound"
670 | new "mute sound"
671 |
672 | # renpy/common/00preferences.rpy:534
673 | old "mute voice"
674 | new "mute voice"
675 |
676 | # renpy/common/00preferences.rpy:535
677 | old "mute all"
678 | new "mute all"
679 |
680 | # renpy/common/00preferences.rpy:616
681 | old "Clipboard voicing enabled. Press 'shift+C' to disable."
682 | new "Clipboard voicing enabled. Press 'shift+C' to disable."
683 |
684 | # renpy/common/00preferences.rpy:618
685 | old "Self-voicing would say \"[renpy.display.tts.last]\". Press 'alt+shift+V' to disable."
686 | new "Self-voicing would say \"[renpy.display.tts.last]\". Press 'alt+shift+V' to disable."
687 |
688 | # renpy/common/00preferences.rpy:620
689 | old "Self-voicing enabled. Press 'v' to disable."
690 | new "Self-voicing enabled. Press 'v' to disable."
691 |
692 | # renpy/common/00iap.rpy:219
693 | old "Contacting App Store\nPlease Wait..."
694 | new "Contacting App Store\nPlease Wait..."
695 |
696 | # renpy/common/00updater.rpy:419
697 | old "The Ren'Py Updater is not supported on mobile devices."
698 | new "The Ren'Py Updater is not supported on mobile devices."
699 |
700 | # renpy/common/00updater.rpy:548
701 | old "An error is being simulated."
702 | new "An error is being simulated."
703 |
704 | # renpy/common/00updater.rpy:738
705 | old "Either this project does not support updating, or the update status file was deleted."
706 | new "Either this project does not support updating, or the update status file was deleted."
707 |
708 | # renpy/common/00updater.rpy:752
709 | old "This account does not have permission to perform an update."
710 | new "This account does not have permission to perform an update."
711 |
712 | # renpy/common/00updater.rpy:755
713 | old "This account does not have permission to write the update log."
714 | new "This account does not have permission to write the update log."
715 |
716 | # renpy/common/00updater.rpy:783
717 | old "Could not verify update signature."
718 | new "Could not verify update signature."
719 |
720 | # renpy/common/00updater.rpy:1084
721 | old "The update file was not downloaded."
722 | new "The update file was not downloaded."
723 |
724 | # renpy/common/00updater.rpy:1102
725 | old "The update file does not have the correct digest - it may have been corrupted."
726 | new "The update file does not have the correct digest - it may have been corrupted."
727 |
728 | # renpy/common/00updater.rpy:1252
729 | old "While unpacking {}, unknown type {}."
730 | new "While unpacking {}, unknown type {}."
731 |
732 | # renpy/common/00updater.rpy:1624
733 | old "Updater"
734 | new "Updater"
735 |
736 | # renpy/common/00updater.rpy:1631
737 | old "An error has occured:"
738 | new "An error has occured:"
739 |
740 | # renpy/common/00updater.rpy:1633
741 | old "Checking for updates."
742 | new "Checking for updates."
743 |
744 | # renpy/common/00updater.rpy:1635
745 | old "This program is up to date."
746 | new "This program is up to date."
747 |
748 | # renpy/common/00updater.rpy:1637
749 | old "[u.version] is available. Do you want to install it?"
750 | new "[u.version] is available. Do you want to install it?"
751 |
752 | # renpy/common/00updater.rpy:1639
753 | old "Preparing to download the updates."
754 | new "Preparing to download the updates."
755 |
756 | # renpy/common/00updater.rpy:1641
757 | old "Downloading the updates."
758 | new "Downloading the updates."
759 |
760 | # renpy/common/00updater.rpy:1643
761 | old "Unpacking the updates."
762 | new "Unpacking the updates."
763 |
764 | # renpy/common/00updater.rpy:1645
765 | old "Finishing up."
766 | new "Finishing up."
767 |
768 | # renpy/common/00updater.rpy:1647
769 | old "The updates have been installed. The program will restart."
770 | new "The updates have been installed. The program will restart."
771 |
772 | # renpy/common/00updater.rpy:1649
773 | old "The updates have been installed."
774 | new "The updates have been installed."
775 |
776 | # renpy/common/00updater.rpy:1651
777 | old "The updates were cancelled."
778 | new "The updates were cancelled."
779 |
780 | # renpy/common/00updater.rpy:1666
781 | old "Proceed"
782 | new "Proceed"
783 |
784 | # renpy/common/00compat.rpy:371
785 | old "Fullscreen"
786 | new "Fullscreen"
787 |
788 | # renpy/common/00gallery.rpy:627
789 | old "Image [index] of [count] locked."
790 | new "Image [index] of [count] locked."
791 |
792 | # renpy/common/00gallery.rpy:647
793 | old "prev"
794 | new "prev"
795 |
796 | # renpy/common/00gallery.rpy:648
797 | old "next"
798 | new "next"
799 |
800 | # renpy/common/00gallery.rpy:649
801 | old "slideshow"
802 | new "slideshow"
803 |
804 | # renpy/common/00gallery.rpy:650
805 | old "return"
806 | new "return"
807 |
808 | # renpy/common/00gltest.rpy:89
809 | old "Renderer"
810 | new "Renderer"
811 |
812 | # renpy/common/00gltest.rpy:93
813 | old "Automatically Choose"
814 | new "Automatically Choose"
815 |
816 | # renpy/common/00gltest.rpy:100
817 | old "Force GL Renderer"
818 | new "Force GL Renderer"
819 |
820 | # renpy/common/00gltest.rpy:105
821 | old "Force ANGLE Renderer"
822 | new "Force ANGLE Renderer"
823 |
824 | # renpy/common/00gltest.rpy:110
825 | old "Force GLES Renderer"
826 | new "Force GLES Renderer"
827 |
828 | # renpy/common/00gltest.rpy:116
829 | old "Force GL2 Renderer"
830 | new "Force GL2 Renderer"
831 |
832 | # renpy/common/00gltest.rpy:121
833 | old "Force ANGLE2 Renderer"
834 | new "Force ANGLE2 Renderer"
835 |
836 | # renpy/common/00gltest.rpy:126
837 | old "Force GLES2 Renderer"
838 | new "Force GLES2 Renderer"
839 |
840 | # renpy/common/00gltest.rpy:132
841 | old "Gamepad"
842 | new "Gamepad"
843 |
844 | # renpy/common/00gltest.rpy:136
845 | old "Enable (No Blocklist)"
846 | new "Enable (No Blocklist)"
847 |
848 | # renpy/common/00gltest.rpy:150
849 | old "Calibrate"
850 | new "Calibrate"
851 |
852 | # renpy/common/00gltest.rpy:159
853 | old "Powersave"
854 | new "Powersave"
855 |
856 | # renpy/common/00gltest.rpy:173
857 | old "Framerate"
858 | new "Framerate"
859 |
860 | # renpy/common/00gltest.rpy:177
861 | old "Screen"
862 | new "Screen"
863 |
864 | # renpy/common/00gltest.rpy:181
865 | old "60"
866 | new "60"
867 |
868 | # renpy/common/00gltest.rpy:185
869 | old "30"
870 | new "30"
871 |
872 | # renpy/common/00gltest.rpy:191
873 | old "Tearing"
874 | new "Tearing"
875 |
876 | # renpy/common/00gltest.rpy:207
877 | old "Changes will take effect the next time this program is run."
878 | new "Changes will take effect the next time this program is run."
879 |
880 | # renpy/common/00gltest.rpy:214
881 | old "Quit"
882 | new "Quit"
883 |
884 | # renpy/common/00gltest.rpy:242
885 | old "Performance Warning"
886 | new "Performance Warning"
887 |
888 | # renpy/common/00gltest.rpy:247
889 | old "This computer is using software rendering."
890 | new "This computer is using software rendering."
891 |
892 | # renpy/common/00gltest.rpy:249
893 | old "This game requires use of GL2 that can't be initialised."
894 | new "This game requires use of GL2 that can't be initialised."
895 |
896 | # renpy/common/00gltest.rpy:251
897 | old "This computer has a problem displaying graphics: [problem]."
898 | new "This computer has a problem displaying graphics: [problem]."
899 |
900 | # renpy/common/00gltest.rpy:255
901 | old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display."
902 | new "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display."
903 |
904 | # renpy/common/00gltest.rpy:259
905 | old "The {a=edit:1:log.txt}log.txt{/a} file may contain information to help you determine what is wrong with your computer."
906 | new "The {a=edit:1:log.txt}log.txt{/a} file may contain information to help you determine what is wrong with your computer."
907 |
908 | # renpy/common/00gltest.rpy:264
909 | old "More details on how to fix this can be found in the {a=[url]}documentation{/a}."
910 | new "More details on how to fix this can be found in the {a=[url]}documentation{/a}."
911 |
912 | # renpy/common/00gltest.rpy:269
913 | old "Continue, Show this warning again"
914 | new "Continue, Show this warning again"
915 |
916 | # renpy/common/00gltest.rpy:273
917 | old "Continue, Don't show warning again"
918 | new "Continue, Don't show warning again"
919 |
920 | # renpy/common/00gltest.rpy:281
921 | old "Change render options"
922 | new "Change render options"
923 |
924 | # renpy/common/00gamepad.rpy:32
925 | old "Select Gamepad to Calibrate"
926 | new "Select Gamepad to Calibrate"
927 |
928 | # renpy/common/00gamepad.rpy:35
929 | old "No Gamepads Available"
930 | new "No Gamepads Available"
931 |
932 | # renpy/common/00gamepad.rpy:54
933 | old "Calibrating [name] ([i]/[total])"
934 | new "Calibrating [name] ([i]/[total])"
935 |
936 | # renpy/common/00gamepad.rpy:58
937 | old "Press or move the '[control!s]' [kind]."
938 | new "Press or move the '[control!s]' [kind]."
939 |
940 | # renpy/common/00gamepad.rpy:68
941 | old "Skip (A)"
942 | new "Skip (A)"
943 |
944 | # renpy/common/00gamepad.rpy:71
945 | old "Back (B)"
946 | new "Back (B)"
947 |
948 | # renpy/common/_errorhandling.rpym:555
949 | old "Open"
950 | new "Open"
951 |
952 | # renpy/common/_errorhandling.rpym:557
953 | old "Opens the traceback.txt file in a text editor."
954 | new "Opens the traceback.txt file in a text editor."
955 |
956 | # renpy/common/_errorhandling.rpym:559
957 | old "Copy BBCode"
958 | new "Copy BBCode"
959 |
960 | # renpy/common/_errorhandling.rpym:561
961 | old "Copies the traceback.txt file to the clipboard as BBcode for forums like https://lemmasoft.renai.us/."
962 | new "Copies the traceback.txt file to the clipboard as BBcode for forums like https://lemmasoft.renai.us/."
963 |
964 | # renpy/common/_errorhandling.rpym:563
965 | old "Copy Markdown"
966 | new "Copy Markdown"
967 |
968 | # renpy/common/_errorhandling.rpym:565
969 | old "Copies the traceback.txt file to the clipboard as Markdown for Discord."
970 | new "Copies the traceback.txt file to the clipboard as Markdown for Discord."
971 |
972 | # renpy/common/_errorhandling.rpym:594
973 | old "An exception has occurred."
974 | new "An exception has occurred."
975 |
976 | # renpy/common/_errorhandling.rpym:617
977 | old "Rollback"
978 | new "Rollback"
979 |
980 | # renpy/common/_errorhandling.rpym:619
981 | old "Attempts a roll back to a prior time, allowing you to save or choose a different choice."
982 | new "Attempts a roll back to a prior time, allowing you to save or choose a different choice."
983 |
984 | # renpy/common/_errorhandling.rpym:622
985 | old "Ignore"
986 | new "Ignore"
987 |
988 | # renpy/common/_errorhandling.rpym:626
989 | old "Ignores the exception, allowing you to continue."
990 | new "Ignores the exception, allowing you to continue."
991 |
992 | # renpy/common/_errorhandling.rpym:628
993 | old "Ignores the exception, allowing you to continue. This often leads to additional errors."
994 | new "Ignores the exception, allowing you to continue. This often leads to additional errors."
995 |
996 | # renpy/common/_errorhandling.rpym:632
997 | old "Reload"
998 | new "Reload"
999 |
1000 | # renpy/common/_errorhandling.rpym:634
1001 | old "Reloads the game from disk, saving and restoring game state if possible."
1002 | new "Reloads the game from disk, saving and restoring game state if possible."
1003 |
1004 | # renpy/common/_errorhandling.rpym:637
1005 | old "Console"
1006 | new "Console"
1007 |
1008 | # renpy/common/_errorhandling.rpym:639
1009 | old "Opens a console to allow debugging the problem."
1010 | new "Opens a console to allow debugging the problem."
1011 |
1012 | # renpy/common/_errorhandling.rpym:652
1013 | old "Quits the game."
1014 | new "Quits the game."
1015 |
1016 | # renpy/common/_errorhandling.rpym:673
1017 | old "Parsing the script failed."
1018 | new "Parsing the script failed."
1019 |
1020 | # renpy/common/_developer/developer.rpym:38
1021 | old "Developer Menu"
1022 | new "Developer Menu"
1023 |
1024 | # renpy/common/_developer/developer.rpym:43
1025 | old "Interactive Director (D)"
1026 | new "Interactive Director (D)"
1027 |
1028 | # renpy/common/_developer/developer.rpym:45
1029 | old "Reload Game (Shift+R)"
1030 | new "Reload Game (Shift+R)"
1031 |
1032 | # renpy/common/_developer/developer.rpym:47
1033 | old "Console (Shift+O)"
1034 | new "Console (Shift+O)"
1035 |
1036 | # renpy/common/_developer/developer.rpym:49
1037 | old "Variable Viewer"
1038 | new "Variable Viewer"
1039 |
1040 | # renpy/common/_developer/developer.rpym:51
1041 | old "Image Location Picker"
1042 | new "Image Location Picker"
1043 |
1044 | # renpy/common/_developer/developer.rpym:53
1045 | old "Filename List"
1046 | new "Filename List"
1047 |
1048 | # renpy/common/_developer/developer.rpym:57
1049 | old "Show Image Load Log (F4)"
1050 | new "Show Image Load Log (F4)"
1051 |
1052 | # renpy/common/_developer/developer.rpym:60
1053 | old "Hide Image Load Log (F4)"
1054 | new "Hide Image Load Log (F4)"
1055 |
1056 | # renpy/common/_developer/developer.rpym:63
1057 | old "Image Attributes"
1058 | new "Image Attributes"
1059 |
1060 | # renpy/common/_developer/developer.rpym:90
1061 | old "[name] [attributes] (hidden)"
1062 | new "[name] [attributes] (hidden)"
1063 |
1064 | # renpy/common/_developer/developer.rpym:94
1065 | old "[name] [attributes]"
1066 | new "[name] [attributes]"
1067 |
1068 | # renpy/common/_developer/developer.rpym:143
1069 | old "Nothing to inspect."
1070 | new "Nothing to inspect."
1071 |
1072 | # renpy/common/_developer/developer.rpym:154
1073 | old "Hide deleted"
1074 | new "Hide deleted"
1075 |
1076 | # renpy/common/_developer/developer.rpym:154
1077 | old "Show deleted"
1078 | new "Show deleted"
1079 |
1080 | # renpy/common/_developer/developer.rpym:278
1081 | old "Return to the developer menu"
1082 | new "Return to the developer menu"
1083 |
1084 | # renpy/common/_developer/developer.rpym:443
1085 | old "Rectangle: %r"
1086 | new "Rectangle: %r"
1087 |
1088 | # renpy/common/_developer/developer.rpym:448
1089 | old "Mouse position: %r"
1090 | new "Mouse position: %r"
1091 |
1092 | # renpy/common/_developer/developer.rpym:453
1093 | old "Right-click or escape to quit."
1094 | new "Right-click or escape to quit."
1095 |
1096 | # renpy/common/_developer/developer.rpym:485
1097 | old "Rectangle copied to clipboard."
1098 | new "Rectangle copied to clipboard."
1099 |
1100 | # renpy/common/_developer/developer.rpym:488
1101 | old "Position copied to clipboard."
1102 | new "Position copied to clipboard."
1103 |
1104 | # renpy/common/_developer/developer.rpym:506
1105 | old "Type to filter: "
1106 | new "Type to filter: "
1107 |
1108 | # renpy/common/_developer/developer.rpym:633
1109 | old "Textures: [tex_count] ([tex_size_mb:.1f] MB)"
1110 | new "Textures: [tex_count] ([tex_size_mb:.1f] MB)"
1111 |
1112 | # renpy/common/_developer/developer.rpym:637
1113 | old "Image cache: [cache_pct:.1f]% ([cache_size_mb:.1f] MB)"
1114 | new "Image cache: [cache_pct:.1f]% ([cache_size_mb:.1f] MB)"
1115 |
1116 | # renpy/common/_developer/developer.rpym:647
1117 | old "✔ "
1118 | new "✔ "
1119 |
1120 | # renpy/common/_developer/developer.rpym:650
1121 | old "✘ "
1122 | new "✘ "
1123 |
1124 | # renpy/common/_developer/developer.rpym:655
1125 | old "\n{color=#cfc}✔ predicted image (good){/color}\n{color=#fcc}✘ unpredicted image (bad){/color}\n{color=#fff}Drag to move.{/color}"
1126 | new "\n{color=#cfc}✔ predicted image (good){/color}\n{color=#fcc}✘ unpredicted image (bad){/color}\n{color=#fff}Drag to move.{/color}"
1127 |
1128 | # renpy/common/_developer/inspector.rpym:38
1129 | old "Displayable Inspector"
1130 | new "Displayable Inspector"
1131 |
1132 | # renpy/common/_developer/inspector.rpym:61
1133 | old "Size"
1134 | new "Size"
1135 |
1136 | # renpy/common/_developer/inspector.rpym:65
1137 | old "Style"
1138 | new "Style"
1139 |
1140 | # renpy/common/_developer/inspector.rpym:71
1141 | old "Location"
1142 | new "Location"
1143 |
1144 | # renpy/common/_developer/inspector.rpym:122
1145 | old "Inspecting Styles of [displayable_name!q]"
1146 | new "Inspecting Styles of [displayable_name!q]"
1147 |
1148 | # renpy/common/_developer/inspector.rpym:139
1149 | old "displayable:"
1150 | new "displayable:"
1151 |
1152 | # renpy/common/_developer/inspector.rpym:145
1153 | old " (no properties affect the displayable)"
1154 | new " (no properties affect the displayable)"
1155 |
1156 | # renpy/common/_developer/inspector.rpym:147
1157 | old " (default properties omitted)"
1158 | new " (default properties omitted)"
1159 |
1160 | # renpy/common/_developer/inspector.rpym:185
1161 | old ""
1162 | new ""
1163 |
1164 | # renpy/common/00console.rpy:524
1165 | old "Press to exit console. Type help for help.\n"
1166 | new "Press to exit console. Type help for help.\n"
1167 |
1168 | # renpy/common/00console.rpy:528
1169 | old "Ren'Py script enabled."
1170 | new "Ren'Py script enabled."
1171 |
1172 | # renpy/common/00console.rpy:530
1173 | old "Ren'Py script disabled."
1174 | new "Ren'Py script disabled."
1175 |
1176 | # renpy/common/00console.rpy:779
1177 | old "help: show this help"
1178 | new "help: show this help"
1179 |
1180 | # renpy/common/00console.rpy:784
1181 | old "commands:\n"
1182 | new "commands:\n"
1183 |
1184 | # renpy/common/00console.rpy:794
1185 | old " : run the statement\n"
1186 | new " : run the statement\n"
1187 |
1188 | # renpy/common/00console.rpy:796
1189 | old " : run the expression or statement"
1190 | new " : run the expression or statement"
1191 |
1192 | # renpy/common/00console.rpy:804
1193 | old "clear: clear the console history"
1194 | new "clear: clear the console history"
1195 |
1196 | # renpy/common/00console.rpy:808
1197 | old "exit: exit the console"
1198 | new "exit: exit the console"
1199 |
1200 | # renpy/common/00console.rpy:816
1201 | old "stack: print the return stack"
1202 | new "stack: print the return stack"
1203 |
1204 | # renpy/common/00console.rpy:838
1205 | old "load : loads the game from slot"
1206 | new "load : loads the game from slot"
1207 |
1208 | # renpy/common/00console.rpy:851
1209 | old "save : saves the game in slot"
1210 | new "save : saves the game in slot"
1211 |
1212 | # renpy/common/00console.rpy:862
1213 | old "reload: reloads the game, refreshing the scripts"
1214 | new "reload: reloads the game, refreshing the scripts"
1215 |
1216 | # renpy/common/00console.rpy:870
1217 | 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"
1218 | 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"
1219 |
1220 | # renpy/common/00console.rpy:907
1221 | old "unwatch : stop watching an expression"
1222 | new "unwatch : stop watching an expression"
1223 |
1224 | # renpy/common/00console.rpy:953
1225 | old "unwatchall: stop watching all expressions"
1226 | new "unwatchall: stop watching all expressions"
1227 |
1228 | # renpy/common/00console.rpy:974
1229 | old "jump