Compare commits

...

310 Commits

Author SHA1 Message Date
Tom Rothamel 37e8fd19cd Set _last_say_window at the start of a say statement. 2011-02-07 09:54:54 -05:00
Tom Rothamel f600e6a24b Remove texture unit check. 2011-02-06 17:38:30 -05:00
Tom Rothamel ca9009f5fe Fix problems with menu prediction. Doc/screen fixes. 2011-02-06 16:09:40 -05:00
Tom Rothamel 9a299a9b38 Make chosen work. 2011-02-06 10:51:20 -05:00
Tom Rothamel 845ae6e7ba Add FileSlotName. 2011-02-06 09:48:03 -05:00
Tom Rothamel 8f706107ac 6.12.0d 2011-02-05 21:28:37 -05:00
Tom Rothamel d489199e00 Screen tweaks, doc fixes. 2011-02-05 21:06:39 -05:00
Tom Rothamel bf023dc2e3 Only select FileSave if confirm=True. 2011-02-05 20:17:00 -05:00
Tom Rothamel ac6b04b5e3 Add FilePageName. 2011-02-05 16:53:14 -05:00
Tom Rothamel a34de5d601 Predict main_menu while in splashscreen.
Better logging on image cache misses.

Minor bug/doc fixes.
2011-02-05 13:58:15 -05:00
Tom Rothamel b9900776a8 Fix choice example 2011-02-03 23:53:57 -05:00
Tom Rothamel 12a444c11f Bump version. 2011-02-03 22:14:29 -05:00
Tom Rothamel 433473e53e No predict when a movie is playing; image cache debugging; gl debugging. 2011-02-03 21:39:57 -05:00
Tom Rothamel d5f889767a Multiple changes.
* Change how chosen choices are reported to screens.
* Don't use raw pygame to report an error.
* Check in the documentation includes.
2011-02-03 00:20:03 -05:00
Tom Rothamel 9873dd487c Don't go fullscreen on Android. 2011-02-02 00:30:44 -05:00
Tom Rothamel ec8bed61f1 Add xminimum property. Rewrite compute_subrect as compute_subline, which
winds up with clearer code.
2011-02-02 00:24:48 -05:00
Tom Rothamel d76971385d Fix typos. (Thanks backansi.) 2011-01-30 21:50:36 -05:00
Tom Rothamel b87fed5541 Remove unnecessary change. 2011-01-30 20:46:41 -05:00
Tom Rothamel bd8d3dbc38 Use the 6.11.2 (hacky) frame code when using the software renderer, to
prevent visual artifacts.
2011-01-30 20:38:14 -05:00
Tom Rothamel 6022e3fa2b Fixes. 2011-01-30 19:47:49 -05:00
Tom Rothamel c5c8a6e20e Allow unicode in ATL. 2011-01-30 09:19:21 -05:00
Tom Rothamel 3306bc848a Start work on b. 2011-01-30 09:03:36 -05:00
Tom Rothamel 2911ef54e5 Fix UTF-8 code. 2011-01-30 08:35:54 -05:00
Tom Rothamel cc54d1970b Windows & Distribution fixes. 2011-01-29 18:26:49 -05:00
Tom Rothamel e6915fffd3 Ensure that we can load Matrix2Ds. 2011-01-29 12:16:36 -05:00
Tom Rothamel 964d746f6d Move yesno_prompt back to 6.11 location. 2011-01-29 10:44:33 -05:00
Tom Rothamel de6af43d74 Bump copyright year. 2011-01-29 09:27:48 -05:00
Tom Rothamel 0dc1a6e46c Android docs. 2011-01-29 00:23:53 -05:00
Tom Rothamel 4098830804 Prevent get_screenshot from returning None. 2011-01-28 00:29:48 -05:00
Tom Rothamel 304ab15b8f Doc and tutorial additions/fixes. 2011-01-28 00:26:24 -05:00
Tom Rothamel 16fa9410db Pixel opacity can't be determined in GLES mode - so don't bother trying. 2011-01-28 00:10:38 -05:00
Tom Rothamel 9ff69de20c Kill a possible INVALID_ENUM error. 2011-01-27 21:51:14 -05:00
Tom Rothamel cd50f1ee86 Document snowblossom. 2011-01-27 19:07:19 -05:00
Tom Rothamel 195f3d6130 Documentation; Particle fix; Sprite demo. 2011-01-27 18:36:10 -05:00
Tom Rothamel 89d8622f6f Typo fix in tutorial. Change how we setup modulefinder. 2011-01-27 01:58:18 -05:00
Tom Rothamel d71e054eb4 Changes to import so that we can build packages. 2011-01-27 01:17:27 -05:00
Tom Rothamel 48a648eecd A far more minimial solution. 2011-01-27 00:07:16 -05:00
Tom Rothamel 63268d079e Remove the clipper from the software renderer, as it was causing problems
with transformed scaled images.
2011-01-26 23:24:54 -05:00
Tom Rothamel 743d5ca81a Add starfield effect. 2011-01-26 16:30:44 -05:00
Tom Rothamel dffb33c8e0 Fix the demo. 2011-01-25 21:36:11 -05:00
Tom Rothamel a6ea0931dd Fix Philippines flag orientation.
Never trust mugenjohncel.
2011-01-24 23:33:36 -05:00
Tom Rothamel 17016c0eb2 Fix bugs, tweak memory usage. 2011-01-24 23:33:31 -05:00
Tom Rothamel 67c703d934 Use big textures for RTT. 2011-01-24 22:28:58 -05:00
Tom Rothamel c163d1c936 Add focus_mask to screen language. 2011-01-24 21:12:33 -05:00
Tom Rothamel e3c15a2c58 Automatically size the window on initial load. 2011-01-24 19:28:43 -05:00
Tom Rothamel dfc149f292 Use glrtt fbo to render to textures.
Fix problem w/ rtt format.
2011-01-23 23:57:49 -05:00
Tom Rothamel 627ba65b9a Partially fix distribute, fixes for android. 2011-01-22 21:02:57 -05:00
Tom Rothamel a92170d88a Various fixes required to fix the Ren'Py tutorial. 2011-01-22 13:35:26 -05:00
Tom Rothamel 503653cb5e Fix sound problem. 2011-01-22 10:55:47 -05:00
Tom Rothamel 68c277ff9a Cleanup after merging. 2011-01-21 23:13:22 -05:00
Tom Rothamel 7b171b4f9b Spacing. 2011-01-21 22:42:34 -05:00
Tom Rothamel 30956e4c58 Rewrite the code that writes bytecode.rpyb, so that it uses md5 hashes
so that we don't have to recompile the code every time Ren'Py is
upgraded. (This matters on android.)
2011-01-21 22:36:40 -05:00
Tom Rothamel 6a956aacab Ren'Py now treats filenames as if they were case-insensitive. This
means that filename mismatches on Linux should no longer be a problem.
2011-01-21 00:20:33 -05:00
Tom Rothamel 681c845e2d Fix ordering problem the meant a parent's per_interact could be called
before its children's.

Fix lp:680266.
2011-01-19 23:45:07 -05:00
Tom Rothamel 11594ef5e8 Fix problems with SnowBlossom/Particles. 2011-01-19 00:19:21 -05:00
Tom Rothamel 28f06291db sl: add spacing 2011-01-18 23:04:14 -05:00
Tom Rothamel c6937698ed Fix screen prediction, especially for menus.
Rewrote tutorial to use an imagemap-screen.
2011-01-18 21:01:21 -05:00
Tom Rothamel 15f85c8b80 Merge with mainline. 2011-01-17 23:04:27 -05:00
Tom Rothamel 7fd5695f83 More build tweaks. 2011-01-17 23:03:18 -05:00
Tom Rothamel 952880287b Change how we version the module. 2011-01-17 22:01:44 -05:00
Tom Rothamel f76c7cf25a Lower the double-click to quit time to .75 seconds, to prevent confusion. 2011-01-16 14:03:17 -05:00
Tom Rothamel 7c14b4d381 Fix bug that prevented canvas from working in GL mode. 2011-01-16 13:59:42 -05:00
Tom Rothamel c67389f0a3 Fix dbz in audio code. 2011-01-16 11:13:35 -05:00
Tom Rothamel 219994ced2 Fix problems switching from sw -> gl, in 00gltest. 2011-01-15 23:21:28 -05:00
Tom Rothamel 274f08807e Allow Ren'Py to run on ancient OpenGL implementations. 2011-01-15 21:35:03 -05:00
Tom Rothamel 7601b4d3da Ensure Ren'Py can start even when OpenGL is missing. 2011-01-15 20:13:56 -05:00
Tom Rothamel 05d14b4bfd Fix im.matrix.colorize. 2011-01-15 19:24:24 -05:00
Tom Rothamel c5b63fd1c5 Fix get_screenshot regression. 2011-01-15 19:05:58 -05:00
Tom Rothamel 0bb6a926b2 Add config.screenshot_callback. 2011-01-15 18:54:38 -05:00
Tom Rothamel 0124eacb15 Add hovered and unhovered to Bar.
Remove spritemanager sl statement.
2011-01-15 18:19:04 -05:00
Tom Rothamel 7ac06761d6 Add MouseArea/mousearea. Add spritemanager to screen language. 2011-01-15 16:59:47 -05:00
Tom Rothamel c8c6226045 Add screen prediction to say, menu, and call screen statements, and
to several Actions.
2011-01-15 13:53:58 -05:00
Tom Rothamel 507d9610c7 Implement screen variants. 2011-01-15 00:10:53 -05:00
Tom Rothamel 5f4075fc35 Add NVL screen. 2011-01-14 09:39:07 -05:00
Tom Rothamel 514571cc80 Fix problems with options and shift+R reloading. 2011-01-13 01:09:51 -05:00
Tom Rothamel 6ff34b71cf Round stencil box coordinates more accurately. 2011-01-13 01:06:09 -05:00
Tom Rothamel 37416daa53 Fixes for menu screens. 2011-01-13 00:20:23 -05:00
Tom Rothamel 6bd5401633 Make the tutorial game use screens; improve screen support as necessary. 2011-01-12 23:59:25 -05:00
Tom Rothamel ea6b9571b5 Fixed software rendering / transform for now. This required ensuring that
there is always a 2-pixel band around the border of each image, up from
the previous 1-pixel border.
2011-01-10 02:06:00 -05:00
Tom Rothamel bd7c403986 Rewrite Solid and Frame so that they use the GPU to do scaling. Frame
no longer requires its argument to be an image manipulator.
2011-01-09 22:44:14 -05:00
Tom Rothamel 99417726ce Prediction of screens. 2011-01-09 18:14:52 -05:00
Tom Rothamel 4319e542f7 Add accessor for prefixed style properties.
Add prediction for images used in windows, buttons, and bars.
2011-01-09 00:25:44 -05:00
Tom Rothamel 61d8445949 Rewrote image prediction code. 2011-01-08 23:42:13 -05:00
Tom Rothamel 743095064d Update logging. 2011-01-08 01:41:29 -05:00
Tom Rothamel efa12ab5a6 Add logging infrastructure. 2011-01-08 01:15:39 -05:00
Tom Rothamel b49b1b392c Action prediction code. 2011-01-08 00:16:16 -05:00
Tom Rothamel 09e54e9915 Doc fix. 2011-01-07 23:39:14 -05:00
Tom Rothamel 373d175f2d Make imagemap caching configurable on a per-screen basis. 2011-01-04 01:57:10 -05:00
Tom Rothamel 5f3955a04a Cache imagemap hotspots to disk. 2011-01-04 01:37:33 -05:00
Tom Rothamel 98c0e51527 Document images and image manipulators. 2011-01-01 01:03:43 -05:00
Tom Rothamel 8b3a6e8fc6 Checkin to merge docs from wrong place. 2011-01-01 00:47:13 -05:00
Tom Rothamel b2d2e8ba7e Brillantly documented im.py in the wrong place. Checking in for a merge. 2011-01-01 00:46:29 -05:00
Tom Rothamel f1efced19c merge from trunk 2010-12-29 23:54:46 -05:00
Tom Rothamel 5b09dfc80c merge from trunk 2010-12-29 23:54:22 -05:00
Tom Rothamel 39f91a4368 Doc work 2010-12-29 23:52:37 -05:00
Tom Rothamel 3b6c9bde63 Fix sprites and add documentation. 2010-12-29 00:57:54 -05:00
Tom Rothamel 1df05ea53e fix bug when computing determinant. 2010-12-29 00:34:33 -05:00
Tom Rothamel 3e9aee1c6f Documentation. 2010-12-28 00:09:13 -05:00
Tom Rothamel 5231a460da Document Drag and Drop. 2010-12-26 21:10:31 -05:00
Tom Rothamel e6b3b36df9 Tweak sphinx building to handle methods; add (some) docs to dragdrop. 2010-12-25 10:13:22 -05:00
Tom Rothamel 060d510658 Random tweaks to work better with cardgame. 2010-12-25 02:34:23 -05:00
Tom Rothamel 3b21a4aa97 Redo joining support to be a better design; add clicked, hovered, and
unhovered to drag and drop.
2010-12-24 16:19:26 -05:00
Tom Rothamel 4824b44950 Added joins to achieve reasonably working drag and drop. 2010-12-24 01:25:31 -05:00
Tom Rothamel 988a92d4a5 Drag and drop uses style prefixes. 2010-12-23 11:21:53 -05:00
Tom Rothamel 378e2e61bd Implement drag & drop callbacks. 2010-12-23 01:29:23 -05:00
Tom Rothamel eb94a7d9bb Implement drag groups. 2010-12-23 00:40:25 -05:00
Tom Rothamel fe2ba07a57 Remember drag position. 2010-12-22 01:12:57 -05:00
Tom Rothamel 2788b12eb2 Add drag to SL and UI, restrict positions to the screen. 2010-12-21 00:01:59 -05:00
Tom Rothamel 265b553b4e Initial working drag and drop code. 2010-12-20 22:39:55 -05:00
Tom Rothamel 5f800681aa Make field presentable, preventing a memory leak. 2010-12-16 21:56:50 -05:00
Tom Rothamel 890c9cf591 Delete the correct file on restart. 2010-12-16 11:29:23 -05:00
Tom Rothamel 2c356b80ed Reset clear color to black. 2010-12-15 23:20:00 -05:00
Tom Rothamel cc097ba7da Use glScissor for clipping. 2010-12-15 23:12:08 -05:00
Tom Rothamel 78401f1c4a implement config.linear_saves_page_size 2010-12-14 21:43:48 -05:00
Tom Rothamel 8802363544 implement config.linear_saves_page_size 2010-12-14 21:39:51 -05:00
Tom Rothamel 05388c3733 Setup android keymap. 2010-12-14 11:51:54 -05:00
Tom Rothamel 8f84301b39 Android fixes. 2010-12-12 16:26:05 -05:00
Tom Rothamel 774ba5d990 Merge changes from lp:renpy. 2010-12-05 16:46:21 -05:00
Tom Rothamel 6bf0cd93d1 Merge bug fixes. 2010-12-05 16:43:56 -05:00
Tom Rothamel 7f63c26348 Since OpenGL ES doesn't support ClipPlanes, don't use them. 2010-12-05 13:04:22 -05:00
Tom Rothamel bce3e6ede1 More android fixes. 2010-12-05 00:17:48 -05:00
Tom Rothamel 4f642041f9 Change how reloading a game works.
Other minor android-related fixes.
2010-12-04 00:49:02 -05:00
Tom Rothamel b990b2768c Implement fast dissolve, config.simulate_android. 2010-11-29 22:28:42 -05:00
Tom Rothamel 53b8d37d8c Android fixes. 2010-11-28 16:29:47 -05:00
Tom Rothamel db9f63c2d9 Sound on Android Ren'Py. 2010-11-23 12:00:47 -05:00
Tom Rothamel 87df4ff487 Add power management support. 2010-11-16 23:08:49 -05:00
Tom Rothamel f0fe459460 GLES Video Working. 2010-11-14 23:02:07 -05:00
Tom Rothamel f71a35751a Fix problem with texture signedness. 2010-11-08 19:39:32 -05:00
Tom Rothamel 2458d9cbb3 Starting to display using GLES. 2010-11-07 22:15:15 -05:00
Tom Rothamel 81c6d33005 Limited environment. 2010-11-06 23:54:56 -04:00
Tom Rothamel dba5c20e34 Use RGBA instead of BGRA. 2010-11-05 22:34:38 -04:00
Tom Rothamel c2eddb21e5 Android work. 2010-11-04 00:06:55 -04:00
Tom Rothamel de1d289670 Better fix. 2010-11-01 08:01:12 -04:00
Tom Rothamel 623201fd75 fix crash bugs 2010-10-31 23:18:29 -04:00
Tom Rothamel 2f900b6bc7 Bump minimum GL version to 1.3. Rewrite drawing to use array-based functions that are supported by OpenGL ES. 2010-10-31 23:10:48 -04:00
Tom Rothamel 375af0cccd 6.11.2b 2010-10-26 22:12:50 -04:00
Tom Rothamel 8ae8e887f5 Fix a bug in Frame that can cause an image to be drawn more than once
a border size is 0.
2010-10-24 18:06:36 -04:00
Tom Rothamel 201b6432c4 6.11.2a 2010-10-24 14:59:33 -04:00
Tom Rothamel fc10bbf6b6 Update themes code to support Aleema's new themes. 2010-10-23 14:14:27 -04:00
Tom Rothamel 1c82c71aea Defensively code adding an event to the queue. 2010-10-23 00:13:53 -04:00
Tom Rothamel a59abd3135 Rewrote MoveTransition to deal with changes in order more gracefully. 2010-10-22 01:15:41 -04:00
Tom Rothamel a51633b511 Fixed :lpbug:647324, where ImageDissolves are rendered as if
specified with alpha=True whether or not alpha=True was set.
2010-10-21 23:26:41 -04:00
Tom Rothamel 2b40d265f9 Search for environment.txt in the directory containing the mac .app file. 2010-10-21 22:56:54 -04:00
Tom Rothamel 734b5b02f8 Buttons now only pass key events to their children when they are
focused. This allows a screen language key statement to be used as the
child of a button, and only activate when the button is focused.
2010-10-21 22:34:44 -04:00
Tom Rothamel 4120434e5a Add four themes contributed by Aleema. 2010-10-21 20:15:49 -04:00
Tom Rothamel 6d9c4dc6d9 Preserve statement names over more changes. 2010-10-21 19:47:21 -04:00
Tom Rothamel ce94a1360a Fixed a problem that prevented AnimatedValue from functioning properly
when delay was not 1.0. Thanks to Scout for the fix.
2010-10-20 01:09:56 -04:00
Tom Rothamel 27a61f4faf Proofreading by Doomfest. 2010-10-20 00:57:07 -04:00
Tom Rothamel 36f50a482b Deallocate movie surface when a movie is not playing, to prevent the last frame of the previous movie. 2010-10-20 00:47:10 -04:00
Tom Rothamel 28d681b29b Change movie drawing so that we use swscale to convert to RGB, rather
than the SDL stuff. The SDL was broken when video resize was used.
2010-10-20 00:38:32 -04:00
Tom Rothamel ddb53bfce1 Fixed :lpbug:661983, which caused insensitive hotspots to default to
the idle, rather than ground, image when no insensitive image was
supplied.
2010-10-17 02:02:33 -04:00
Tom Rothamel 81414254f9 The maximum default physical size of the Ren'Py window is now 102
pixels smaller than the height of the screen.
2010-10-16 23:33:14 -04:00
Tom Rothamel 4af4481a17 Fixed launchpad bug 647686, a regression that prevented sounds from looping properly.
Added lpbug documentation reference.
2010-10-16 19:06:28 -04:00
Tom Rothamel 1e6e0f0800 Fix spritemanager when st=0, add destroy_all method. 2010-10-11 18:20:48 -04:00
Tom Rothamel f1cff045e1 Better handle the overloading of Return(). 2010-10-09 18:13:11 -04:00
Tom Rothamel b3b3c55473 Factor environments and RTTs out into their own files, so we don't have
to compile them for Android.
2010-10-09 13:50:34 -04:00
Tom Rothamel 7f2c6fd977 Fix software rendering. 2010-10-09 13:22:10 -04:00
Tom Rothamel 59338d3ae3 Eliminate the use of the tegl and pysdlgl modules. 2010-10-09 12:41:55 -04:00
Tom Rothamel 98a5647f97 Convert glenviron and glshader to use GL directly. 2010-10-09 11:26:41 -04:00
Tom Rothamel 5d11642776 Convert gldraw and gltexture to use GL directly. 2010-10-09 10:52:11 -04:00
Tom Rothamel 297277451f Use the TEGL infrastructure to auto-generate gl.pxd. (The result is
checked in for convenience's sake.)
2010-10-09 02:37:12 -04:00
Tom Rothamel d5ec269811 Rewrite Particles in terms of SpriteManager. 2010-10-09 00:25:58 -04:00
Tom Rothamel 02bbe29ccb Finished sprite manager.
Expose python objects in store.
2010-10-08 18:48:39 -04:00
Tom Rothamel 3844ace955 New SpriteManager. 2010-10-08 01:04:20 -04:00
Tom Rothamel 3715a03598 Checkpoint. 2010-10-06 00:25:07 -04:00
Tom Rothamel 82c695a199 make buildable 2010-10-05 23:09:11 -04:00
Tom Rothamel 09ff58a1a6 Add a gc-based to checking for memory leakes in Renders. 2010-10-05 22:58:53 -04:00
Tom Rothamel 0fbe522235 More speedup of transform_render. 2010-10-03 23:57:21 -04:00
Tom Rothamel cc38b5e5c3 Add missing files. 2010-10-03 23:09:32 -04:00
Tom Rothamel c6101f5565 More improvements. 2010-10-03 23:09:18 -04:00
Tom Rothamel f4e50ae4d8 Add config.imagereference_respects_position. When set to False, ImageReference
ignores positions in its styles - much faster.
2010-10-03 18:21:37 -04:00
Tom Rothamel 3f42edbb08 Add some types to draw_render_textures. 2010-10-03 18:04:18 -04:00
Tom Rothamel c63ff665b2 Checkpointing work. 2010-10-03 17:06:23 -04:00
Tom Rothamel 230ef6d4ca Add pxds. 2010-10-02 20:52:43 -04:00
Tom Rothamel 9d1783f4d6 Checkpoint progress. 2010-10-02 20:52:23 -04:00
Tom Rothamel 99d14d9521 Improve the speed of the render function. 2010-10-02 15:30:24 -04:00
Tom Rothamel 57ed7e692e Annotate render fields, implement mark-sweep render gc. 2010-10-02 14:40:43 -04:00
Tom Rothamel 6aaf974049 Make sure everything can build with the latest cython, and remove
cython-generated code from the tree.
2010-09-27 23:03:17 -04:00
Tom Rothamel 1fce0f5557 Add infrastructure for automatically building and loading cython
Ren'Py modules, when they change.
2010-09-27 22:38:12 -04:00
Tom Rothamel f75f0ccb14 Allow the default property to be set in the screen language. 2010-09-16 08:31:39 -04:00
Tom Rothamel 01f82aaf4c Bump version. 2010-09-15 23:37:44 -04:00
Tom Rothamel 8b294e05ad Fix problem where if you hit quit, no at the main menu, the game starts. 2010-09-15 23:34:14 -04:00
Tom Rothamel 5b2fcb85e5 Fixed character not respecting the interact argument. 2010-09-15 22:34:29 -04:00
Tom Rothamel fb1d38dc3a Enter the with mode on with None. 2010-09-14 23:18:08 -04:00
Tom Rothamel 5cc6a8d75a Ensure that empty strings render with 0 width. 2010-09-13 23:22:58 -04:00
Tom Rothamel fbe2a03933 Normalize file line endings during updates. 2010-09-13 21:04:48 -04:00
Tom Rothamel 915bccf099 Fixed problem with modes (reported with patch by Spiky Catapillar.) 2010-09-12 23:52:08 -04:00
Tom Rothamel 0943e368e7 Fix mode to work with nvl and extend. 2010-09-12 23:48:39 -04:00
Tom Rothamel d35c6e190c Fix docs. 2010-09-09 11:37:34 -04:00
Tom Rothamel 1025ad5a6a Reduce size of updates. 2010-09-09 11:23:42 -04:00
Tom Rothamel fd74541318 Check that sayer is valid. 2010-09-09 11:23:24 -04:00
Tom Rothamel 821db477ae Update default enter/leave factories to work with offsets. 2010-09-09 10:06:40 -04:00
Tom Rothamel ed66034930 Fix bug that caused atl revolution not to work. 2010-09-09 09:58:30 -04:00
Tom Rothamel a9c91378fd Another version bump. 2010-09-08 22:17:48 -04:00
Tom Rothamel 1dc58f2ed1 Add AlphaDissolve to the tutorial. 2010-09-08 09:36:56 -04:00
Tom Rothamel ae916e2a59 More updater work. 2010-09-07 22:17:31 -04:00
Tom Rothamel f3af72e67e Properly notify on update events. 2010-09-07 21:52:45 -04:00
Tom Rothamel 939c2121b7 Fixes to updater. 2010-09-07 21:41:02 -04:00
Tom Rothamel 46699bfc1e Update copyright, and bump versions. 2010-09-07 21:19:54 -04:00
Tom Rothamel 63d381d5a6 FieldValues with max_is_zero set to True now work properly. Thanks to
SleepKirby for the fix.
2010-09-07 08:13:30 -04:00
Tom Rothamel c608d18684 Update distribution building to reflect new Windows layout. 2010-09-07 00:05:11 -04:00
Tom Rothamel c31f61e7b6 Integrate updater support w/ launcher. 2010-09-06 23:45:41 -04:00
Tom Rothamel 9912c15c04 Don't consider hidden screens when assigning default focus. 2010-09-06 14:19:07 -04:00
Tom Rothamel 651653593c Make MoveTransition respect offsets. 2010-09-06 12:52:29 -04:00
Tom Rothamel 85858974b8 Add urllib to dependencies. 2010-09-05 23:48:52 -04:00
Tom Rothamel a265fbb797 Fix problem with screen language lines numbers being in error. 2010-09-05 23:26:24 -04:00
Tom Rothamel e353ea2d56 Don't crash when compiling shaders. 2010-09-05 22:54:00 -04:00
Tom Rothamel 6f91db067a Fix a bug with hotbars not working.
Fix a bug caused by an incorrect texture unit check.
2010-09-05 18:32:49 -04:00
Tom Rothamel 8ed51cc810 Add renpy.notify and Notify. 2010-09-04 17:25:59 -04:00
Tom Rothamel f256f174f9 The new :func:HideInterface action allows the interface to
temporarily be hidden, as a screen language action.
2010-09-04 15:59:30 -04:00
Tom Rothamel 49d3796378 Added the :ref:renpy.focus_coordinates function, which returns the
coordinates of the currently focused displayable, when possible.
2010-09-04 15:46:30 -04:00
Tom Rothamel bfb6a18527 The new :ref:modes system allows one to invoke callbacks when
switching from one type of interaction to another. This can be used,
for example, to automatically hide the window before transitions.
2010-09-04 12:30:21 -04:00
Tom Rothamel 2960220a74 Improvements to updater. 2010-09-03 22:52:10 -04:00
Tom Rothamel c6605f1742 Add experimental update code. 2010-09-03 18:17:48 -04:00
Tom Rothamel cebffcfee1 Imagemaps created using the screen language now only have a size equal
to that of their ground image. (Previously, they took up the entire
screen.) This change makes it easier to position an imagemap at a
different location on screen, such as the bottom.

Imagemaps now take an alpha argument. If true (the default), hotspots
are only focused if the mouse is over a non-transparent part of the
idle or hover image. If set to false, the hotspot is focused whenever
the mouse is within its boundaries.
2010-09-03 17:42:46 -04:00
Tom Rothamel 006cdb8c3b The developer menu now includes a command that will list all the files
in the game directory.
2010-09-02 01:08:18 -04:00
Tom Rothamel 374e0697bf Fix documentation generation from curried functions. 2010-09-02 00:48:57 -04:00
Tom Rothamel f988878424 Transforms no longer cause a divide by zero exception when the zoom,
xzoom, or yzoom properties are 0.
2010-09-02 00:02:46 -04:00
Tom Rothamel e59b252dce Fix problems with scaling (and especially, switching back and forth
between GL and scaled SW modes.)
2010-08-31 16:36:00 -04:00
Tom Rothamel b2747914d8 Fix hotspot so that it properly handles insensitive and selected images. 2010-08-28 18:47:15 -04:00
Tom Rothamel 41aeb625f3 Try to fix backwards compatibility problem. 2010-08-24 21:55:20 -04:00
Tom Rothamel 4cfa8aa06c Document AlphaDissolve. 2010-08-24 21:51:42 -04:00
Tom Rothamel 8cb4a4e3b9 Merge alphadissolve. 2010-08-24 21:46:58 -04:00
Tom Rothamel 9a84c9715f Use 256 as the parameter - allows alphablend to use the full 8 bits of alpha
range.
2010-08-24 21:17:52 -04:00
Tom Rothamel 38538f1d9a Add AlphaBlend. 2010-08-24 02:33:29 -04:00
Tom Rothamel 6a42b2a107 Initial implementation of AlphaDissolve transition. 2010-08-24 02:20:38 -04:00
Tom Rothamel 486790b810 merge w/ renpy 2010-08-22 16:11:15 -04:00
Tom Rothamel 0e538e2261 Remove obsolete files.
Remove symlinks in documentation.
2010-08-22 16:08:03 -04:00
Tom Rothamel 9042fcca55 Redo the windows build process, so that no symlinks are involved, and so
that dlls are no longer bundled inside renpy.code.
2010-08-22 15:53:55 -04:00
Tom Rothamel 040035adbc Allow keymap to take a list of actions. 2010-08-21 11:58:32 -04:00
Tom Rothamel d72097de18 add comment 2010-08-19 13:23:27 -04:00
Tom Rothamel d9771bdade Draw mouse cursor in right place. 2010-08-19 13:01:20 -04:00
Tom Rothamel 07ca905373 Fix the parameters for define_screen. 2010-08-19 08:48:58 -04:00
Tom Rothamel ccd0d45a67 A sub-render should inherit alpha from the parent render. 2010-08-18 19:54:59 -04:00
Tom Rothamel 15a15870e7 Start of new updater code. 2010-08-18 18:11:09 -04:00
Tom Rothamel 28108c7796 Remove launcher1. 2010-08-18 12:30:05 -04:00
Tom Rothamel 171f388120 6.11.0k 2010-08-17 21:19:01 -04:00
Tom Rothamel bc50f171db Add transition parameters to Show and Hide. 2010-08-17 01:08:10 -04:00
Tom Rothamel ea4c955f1f Modal and zorder are now expressions. Note that this changes the signature to define_screen. 2010-08-16 02:22:54 -04:00
Tom Rothamel 27524457d0 Copy a screen when keeping it around after a hide, rather than modifying the original screen. 2010-08-16 01:53:51 -04:00
Tom Rothamel 01fe67cfa9 Fix problems with screens caused by renpy.transition being given None as an argument, by making it handle that case properly, rather than simply delegating to with_none. 2010-08-15 21:46:21 -04:00
Tom Rothamel f4d493465d Fix problem with iterating over a list that's changing. 2010-08-15 19:15:32 -04:00
Tom Rothamel 33cbe44390 Only call _hide on direct children of the screen. 2010-08-15 02:53:41 -04:00
Tom Rothamel 5214f08d1a Assign ids to displayables correctly.
Remove non-transitions from screens at hide-time.x
2010-08-15 01:50:46 -04:00
Tom Rothamel 608fc986c4 Now can hide screens by name and tag. 2010-08-15 00:39:01 -04:00
Tom Rothamel 779a96f97f Things in a screen without an on hide method go away once hidden. 2010-08-15 00:32:53 -04:00
Tom Rothamel faf48246d7 Don't let a hiding displayable pass along focus. 2010-08-14 20:10:10 -04:00
Tom Rothamel 81ec2a6c35 fix modal when hiding. 2010-08-14 19:12:56 -04:00
Tom Rothamel 803423f12b Was over-aggressive in combining screen and old_transfers - split them. 2010-08-14 17:17:11 -04:00
Tom Rothamel b384ee0381 Make the gl-test strings translatable. Bump version. 2010-08-14 13:29:41 -04:00
Tom Rothamel b8862d6b24 Add support for a "Graphics Acceleration" menu, which allows the user
to choose between software and opengl rendering.
2010-08-13 00:50:48 -04:00
Tom Rothamel dbfa4ed46d Fix problem where displayables on a screen of one name could inherit transforms and state from displayables on a screen of a different name. 2010-08-13 00:38:43 -04:00
Tom Rothamel d9eb999775 Report when a grid is overfull. 2010-08-11 16:30:43 -04:00
Tom Rothamel b4a9ca3f87 Tweaks to gltest.
FilePageNext grows a max argument.

Report screen errors better.
2010-08-11 16:25:31 -04:00
Tom Rothamel d087c86d1a Set correct variable when setting default afm time. 2010-08-10 22:08:14 -04:00
Tom Rothamel 0cfc7b25a6 Remove imagemap rectangle from the image picker. 2010-08-10 00:35:50 -04:00
Tom Rothamel 8f3c9bd2ba Cycle through OpenGL logfile. 2010-08-09 23:19:55 -04:00
Tom Rothamel 91c79cdac9 sl: add default statement. 2010-08-09 21:42:49 -04:00
Tom Rothamel 20e4e110ce Add a check for calling ui.interact inside itself. 2010-08-09 18:57:12 -04:00
Tom Rothamel 870d7ffe2c Try the opengl test twice. 2010-08-09 16:29:10 -04:00
Tom Rothamel 6ff88c914d Fix use of modal in docs. 2010-08-08 22:46:59 -04:00
Tom Rothamel 2a2078517f Only don't transition when failing to go to the game menu from the main
menu.
2010-08-08 22:33:27 -04:00
Tom Rothamel c09f697293 6.11.0i 2010-08-08 20:20:20 -04:00
Tom Rothamel a9e273a13d Document modal more precisely. 2010-08-07 14:53:50 -04:00
Tom Rothamel 592665aa9a Various fixes to cause modal displayables to work better. 2010-08-07 14:43:13 -04:00
Tom Rothamel 3745788f06 Store the OpenGL-giveup value on startup, and use it on a restart. 2010-08-07 10:59:18 -04:00
Tom Rothamel 52b09d8f4c Fix problems with y aspect ratio. 2010-08-07 10:47:22 -04:00
Tom Rothamel 32f25cdcec Fix problem with lint_play_sound. 2010-08-07 09:06:41 -04:00
Tom Rothamel 6f022a9b6a 6.11.0h 2010-08-07 08:52:31 -04:00
Tom Rothamel eea6970929 (doc) Clarify that the hide event isn't called on scene or context exit. 2010-08-07 07:59:41 -04:00
Tom Rothamel 35ecfd279f Tweak when we run the hide event. 2010-08-07 07:52:49 -04:00
Tom Rothamel 1f5c610843 Better logic before picking between adv and nvl windows. 2010-08-07 00:30:52 -04:00
Tom Rothamel 05f4c52c33 Always render to an alpha texture, for dissolve/imagedissolve in sw mode. 2010-08-06 12:27:54 -04:00
Tom Rothamel 326f773e75 Constrain drawing area using glViewport. 2010-08-06 02:08:03 -04:00
Tom Rothamel 2079b518a2 F11 now toggles fullscreen. 2010-08-04 01:15:20 -04:00
Tom Rothamel 70ed15e5ac Add If function. 2010-08-04 00:59:09 -04:00
Tom Rothamel f1d7fe0c73 Rename group -> style_group. 2010-08-03 22:59:53 -04:00
Tom Rothamel 08e4b9bafc Minor optimizations in GL code. 2010-08-03 22:22:01 -04:00
Tom Rothamel 56a0212316 Fix problem with mouse, when going fullscreen. 2010-08-03 22:17:09 -04:00
Tom Rothamel 5df6506191 Take file_prefix and file_suffix into account for lint. 2010-08-02 23:36:10 -04:00
Tom Rothamel 39779be980 Fix problems with lint and call. Humanize lint output. 2010-08-02 18:22:13 -04:00
Tom Rothamel bdacdddf14 Fix crash with shift+Y and generated styles. 2010-08-02 17:59:40 -04:00
Tom Rothamel 4b32337ef3 Command the mouse to be displayed once a second. 2010-08-02 17:58:01 -04:00
Tom Rothamel 4897d5b7a9 Ensure Ren'Py starts when the GL modules can't be loaded. 2010-08-02 12:29:58 -04:00
Tom Rothamel 6daa64facd Store and restore the windows size on a shift+R reload. 2010-08-02 12:19:31 -04:00
Tom Rothamel 07651e414d Ensure we always check for yesno_prompt. 2010-08-01 21:33:29 -04:00
Tom Rothamel 7e1e76f0d8 When loading textures, load the borders with adjacent pixels, rather than
transparency. This means we no longer have to distort textures when
upscaling, which improves quality.
2010-08-01 13:47:05 -04:00
Tom Rothamel b91a5d1a16 Check in keywords file. 2010-07-31 23:19:39 -04:00
Tom Rothamel 39b0646f24 Change around some things involving clip planes to try to fix a
problem with them on the mac.

6.11.0g
2010-07-31 21:08:58 -04:00
Tom Rothamel ea6406f144 When upscaling, adjust texture coordinates so that we never go outside
the loaded texture.
2010-07-31 13:30:23 -04:00
Tom Rothamel 7ed3f3fbad Add the quickstart to the manual. 2010-07-30 13:16:50 -04:00
Tom Rothamel cacb4ac40e Allow {fast} to work in menus and all-at-once mode. 2010-07-28 23:27:52 -04:00
Tom Rothamel 9503744631 Unbranding error messages. 2010-07-28 22:45:00 -04:00
Tom Rothamel 58dfd5dbfa Document focus, and use it to ensure that menus do not have any choice highlighted by default. 2010-07-28 22:40:48 -04:00
Tom Rothamel 60d5507184 Only call unhovered when a non-default unhover occurs. 2010-07-28 22:34:39 -04:00
Tom Rothamel 5641cec146 Give a proper error when someone tries to use an empty string as a displayable. 2010-07-28 22:32:51 -04:00
Tom Rothamel dd455e3d14 Fix problems with window hide / window show and NVL-mode. 2010-07-28 21:55:16 -04:00
Tom Rothamel 6876697f74 Fixed proble with default focus and subsurface. 2010-07-25 23:15:40 -04:00
Tom Rothamel 4373cab8cf 6.11.0f 2010-07-25 20:10:01 -04:00
Tom Rothamel eeccb5833b Doc fixes, remove AutoForward as an independent action. 2010-07-25 20:07:22 -04:00
Tom Rothamel 790dad0330 Fix / document screens. 2010-07-25 19:58:48 -04:00
Tom Rothamel 078a38af5d Pass transform events through to children of Transforms. 2010-07-25 13:55:44 -04:00
Tom Rothamel 8c186d2eb1 Remove extraneous print. 2010-07-25 13:40:04 -04:00
Tom Rothamel 81b94b27e0 Display problems documentation.
Limit display to screen size.
2010-07-25 01:15:20 -04:00
Tom Rothamel 17e8616e8c Do not buffer playback of movies.
Change get_playing to return audio that's queued up to play, as well as audio that's currently playing.
2010-07-24 16:44:39 -04:00
Tom Rothamel 50b0dc3c5e Add the ability to blacklist mugen's video card. 2010-07-24 13:24:49 -04:00
Tom Rothamel 9e217e722f Introduce StoreProxy object. 2010-07-24 11:41:22 -04:00
Tom Rothamel f466b44b66 Fix problem with negative line_spacing. 2010-07-23 02:32:31 -04:00
Tom Rothamel 34e0fc7cba Always take screenshots from the main thread. 2010-07-23 01:53:39 -04:00
Tom Rothamel bb88a7bb95 Remove letterboxing when taking a screenshot. 2010-07-23 01:14:06 -04:00
313 changed files with 18828 additions and 36406 deletions
+41 -1
View File
@@ -49,7 +49,6 @@ renpygame-1.2.zip
speedtest
styles.txt
renpygame-demo/game/saves
./lib
Lucy Sprites.zip
translate
close_bugs.py
@@ -58,3 +57,44 @@ scite-6.10.zip
scite-renpy-20090803.zip
module/cython.sh
old_demo
opengl.txt
Microsoft.VC90.CRT.manifest
console.exe
msvcr90.dll
python26.dll
renpy.exe
lib/windows-x86
sphinx/source/inc/*
doc/*
updates/prerelease
module/render.c
module/_renpy.c
module/_renpy_pysdlgl.c
module/_renpybidi.c
module/sound.c
module/winmixer.c
module/accelerator.html
module/gldraw.html
module/glenviron_fixed.html
module/glenviron.html
module/glenviron_limited.html
module/glenviron_shader.html
module/glrtt_copy.html
module/glshader.html
module/gltexture.html
module/render.html
module/accelerator.c
module/gldraw.c
module/glenviron.c
module/glenviron_fixed.c
module/glenviron_limited.c
module/glenviron_shader.c
module/glrtt_copy.c
module/glshader.c
module/gltexture.c
log.txt
lib/linux-x86
lib/python
lib/update-version.txt
sphinx/game/saves
tutorial/game/saves
+5 -3
View File
@@ -2,7 +2,7 @@
License
=======
Ren'Py itself is covered by the terms of the following (MIT) license:
Most of Ren'Py is covered by the terms of the following (MIT) license:
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files
@@ -23,13 +23,15 @@ Ren'Py itself is covered by the terms of the following (MIT) license:
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Portions of Ren'Py are derived from code that is copyright using the
Lesser GNU Public License, so Ren'Py games must be distributed in a
manner that satisfies the LGPL.
Please see each individual source file for a list of copyright
holders. The artwork in the demo is released by various copyright
holders, under the same terms.
The Ren'Py module, the Ren'Py windows binaries, and the various Ren'Py
launchers may contain code taken from the following projects:
Ren'Py binaries include code from the following projects:
* Python (Python License)
* Pygame (LGPL)
-1
View File
@@ -1 +0,0 @@
dist/Microsoft.VC90.CRT.manifest
+2
View File
@@ -5,6 +5,8 @@ if [ "x$1" = "x" ]; then
exit
fi
rsync -av updates tom@onegeek.org:/home/tom/WWW.update/renpy/
mkdir ~/ab/website/renpy/dl/$1
cp dists/renpy-$1-* ~/ab/website/renpy/dl/$1
cp CHANGELOG.txt ~/ab/website/renpy/dl/$1
+39 -11
View File
@@ -1,20 +1,37 @@
#!/usr/bin/env python
import modulefinder
import shutil
from distutils.core import setup
import py2exe
import sys
import zipfile
import traceback
import os
# The pythonpath on my system.
sys.path.insert(0, 'c:\\msys\\1.0\\newbuild\\install\\bin')
sys.path.insert(0, 'c:\\msys\\1.0\\newbuild\\install\\python')
def move_from_dist(fn):
"""
Moves the file `fn` from the dist directory to the main
directory. (This means we don't need symlinks on windows.)
"""
if os.path.isdir(fn):
shutil.rmtree(fn)
elif os.path.exists(fn):
os.unlink(fn)
os.rename("dist/" + fn, fn)
import renpy
renpy.setup_modulefinder(modulefinder)
def main():
sys.argv[1:] = [ 'py2exe', '--bundle', '2', '-a', '--dll-excludes', 'w9xpopen.exe', ]
# sys.argv[1:] = [ 'py2exe', '-a', '--dll-excludes', 'w9xpopen.exe', ]
sys.argv[1:] = [ 'py2exe', '-a', '--dll-excludes', 'w9xpopen.exe', ]
setup(name="Ren'Py",
windows=[ dict(script="renpy.py",
@@ -25,7 +42,7 @@ def main():
console=[ dict(script="renpy.py", dest_base="console") ],
zipfile='renpy.code',
zipfile='lib/windows-x86/renpy.code',
options={ 'py2exe' : { 'excludes' : [ 'doctest',
'pygame.macosx',
@@ -49,14 +66,18 @@ def main():
)
zfold = zipfile.ZipFile("dist/renpy.code")
zfnew = zipfile.ZipFile("renpy.code", "w", zipfile.ZIP_STORED)
zfold = zipfile.ZipFile("dist/lib/windows-x86/renpy.code")
zfnew = zipfile.ZipFile("dist/lib/windows-x86/renpy.code.new", "w", zipfile.ZIP_STORED)
seen = { }
for fn in zfold.namelist():
if fn.startswith("renpy/"):
continue
# Keep around .pyo files that load pyd files.
pydfn = fn.replace("/", ".").replace(".pyo", ".pyd")
if not os.path.exists("dist/lib/windows-x86/" + pydfn):
continue
if fn in seen:
continue
@@ -71,14 +92,21 @@ def main():
zfold.close()
zfnew.close()
shutil.copy("c:/Python26/Microsoft.VC90.CRT.manifest", "dist/Microsoft.VC90.CRT.manifest")
shutil.copy("c:/Python26/msvcr90.dll", "dist/msvcr90.dll")
os.unlink("dist/lib/windows-x86/renpy.code")
os.rename("dist/lib/windows-x86/renpy.code.new", "dist/lib/windows-x86/renpy.code")
shutil.copy("c:/Python26/Microsoft.VC90.CRT.manifest", "Microsoft.VC90.CRT.manifest")
shutil.copy("c:/Python26/msvcr90.dll", "msvcr90.dll")
move_from_dist("lib/windows-x86")
move_from_dist("console.exe")
move_from_dist("python26.dll")
move_from_dist("renpy.exe")
try:
main()
except:
traceback.print_exc()
print
print "Press return to quit."
raw_input()
-84
View File
@@ -1,84 +0,0 @@
1#!/usr/bin/env python
import collections
import glob
import re
import sys
import time
# A map from string to filename, line number where the string is found.
strings = collections.defaultdict(list)
def process(fn):
lineno = 0
for data in file(fn, "r"):
lineno += 1
matches = [ ]
matches += re.finditer(r'\bu\"(\\"|[^"])+\"', data)
matches += re.finditer(r"\bu\'(\\'|[^'])+\'", data)
for m in matches:
s = m.group(0)[2:-1]
if "\\u" in s:
continue
if len(s) == 1:
continue
strings[s].append("%s:%d" % (fn, lineno))
if __name__ == "__main__":
files = [ ]
files += glob.glob("launcher2/*.rpy")
files += glob.glob("common/*.rpy")
files += glob.glob("common/_layout/*.rpym")
files += glob.glob("common/_compat/*.rpym")
for fn in files:
process(fn)
converse = [ ]
for k, v in strings.iteritems():
v = " ".join(sorted(v))
converse.append((v, k))
converse.sort()
print """\
# Ren'Py Visual Novel Engine
# Copyright (C) 2009 PyTom <pytom@bishoujo.us>
# This file is distributed under the same license as the Ren'Py package.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: mainline\\n"
"Report-Msgid-Bugs-To: PyTom <pytom@bishoujo.us>\\n"
"POT-Creation-Date: %s\\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n"
"Language-Team: LANGUAGE <LL@li.org>\\n"
"MIME-Version: 1.0\\n"
"Content-Type: text/plain; charset=UTF-8\\n"
"Content-Transfer-Encoding: 8bit\\n"
""" % time.strftime("%Y-%m-%d %H:%M%z")
for v, k in converse:
print
print "#:", v
print "#, python-format"
print "msgid \"%s\"" % k
print "msgstr \"\""
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# This file contains warpers that are used by ATL. They need to be defined
+10 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init -1210 python:
@@ -41,7 +41,16 @@ init -1210 python:
config.default_transform = None
config.start_scene_black = True
if version <= (6, 11, 0):
config.movetransition_respects_offsets = False
if version <= (6, 11, 2):
config.imagereference_respects_position = True
config.predict_screens = False
config.choice_screen_chosen = False
init 1210 python hide::
# This returns true if the script_version is <= the
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# This file contains a number of definitions of standard
+146 -37
View File
@@ -1,9 +1,39 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# This file contains code to perform the OpenGL test. This is always
# run - even in software mode - so that the user experience remains
# consistent. (But it terminates early in sw-mode.)
# This contains code to choose between OpenGL and Software rendering, when
# a system supports both.
init -1024:
screen _gl_test:
frame:
xalign .5
yalign .33
xpadding 20
ypadding 20
has vbox
label _(u"Graphics Acceleration")
null height 10
textbutton _(u"Automatically Choose"):
size_group "gl"
action SetField(persistent, "_gl_test", "auto")
textbutton _(u"Prefer Software Renderer"):
size_group "gl"
action SetField(persistent, "_gl_test", "sw")
textbutton _(u"Prefer OpenGL Renderer"):
size_group "gl"
action SetField(persistent, "_gl_test", "gl")
null height 10
textbutton _(u"Continue"):
size_group "gl"
action Return(True)
init -1024 python:
# The image that we fill the screen with in GL-test mode.
@@ -16,28 +46,38 @@ init -1024 python:
to make the decisions as to if OpenGL is working or not.
"""
def __init__(self, frames, timeout):
def __init__(self, frames, fps, timeout):
super(__GLTest, self).__init__()
self.target = 1.0 * frames / fps
self.frames = frames
self.timeout = timeout
self.times = [ ]
self.success = False
def render(self, width, height, st, at):
self.frames -= 1
if self.frames <= 0:
renpy.timeout(0)
self.times.append(st)
renpy.redraw(self, 0)
renpy.renpy.log.info("Frame drawn at %f seconds." % st)
if len(self.times) >= self.frames:
frames_timing = self.times[-1] - self.times[-self.frames]
renpy.renpy.log.info("It took %f seconds to render %d frames.", frames_timing, self.frames)
if frames_timing <= self.target:
self.success = True
renpy.timeout(0)
rv = renpy.Render(width, height)
return rv
def event(self, ev, x, y, st):
st = st
if self.frames <= 0:
if self.success:
return True
if st > self.timeout:
@@ -45,35 +85,104 @@ init -1024 python:
renpy.timeout(self.timeout - st)
def __gl_prefer_renderers(renderers):
"""
Forces the current renderer to be renderer, one of gl or sw.
"""
if renpy.display.prefer_renderers == renderers:
return
renpy.display.prefer_renderers = renderers
renpy.display_reset()
def __gl_prompt():
"""
Decides if we want to prompt the user to enable OpenGL mode.
If so, shows a screen that allows the user to alter the
OpenGL setting.
"""
if not renpy.display.interface.safe_mode:
return
__gl_prefer_renderers("sw")
renpy.call_screen("_gl_test")
renpy.display.interface.safe_mode = False
def __gl_test():
"""
Makes the decision as to if we should use GL or SW mode.
"""
import os
if "RENPY_RENDERER" in os.environ:
return
# Our decision survives a restart.
if _restart:
return
renpy.renpy.log.info("GL test mode: %s", persistent._gl_test)
# If GL is disabled, don't bother.
if not config.gl_enable:
return
__gl_prompt()
if persistent._gl_test == "gl":
__gl_prefer_renderers("gl,sw")
return
if persistent._gl_test == "sw":
__gl_prefer_renderers("sw")
return
__gl_prefer_renderers("gl,sw")
ui.pausebehavior(0)
ui.interact(suppress_underlay=True, suppress_overlay=True)
# If GL is able to render FRAMES frames at FPS fps in less
# than DELAY seconds, we consider it to be operational, and
# continue in GL mode. Otherwise, we rever to software
# rendering mode.
FRAMES = 5
FPS = 15
DELAY = 1
renpy.transition(Dissolve(DELAY), always=True, force=True)
ui.add(__GLTest(FRAMES, FPS, DELAY))
result = ui.interact(suppress_overlay=True, suppress_underlay=True)
if result:
__gl_prefer_renderers("gl,sw")
else:
__gl_prefer_renderers("sw")
# Init-time code:
# Make a guess as to what modes we should be in.
if persistent._gl_test is None:
persistent._gl_test = "auto"
if persistent._gl_test == "sw":
renpy.display.prefer_renderers = "sw"
label _gl_test:
# Show the test image.
scene
show expression config.gl_test_image
python hide:
# If GL is able to render FRAMES in DELAY seconds, we consider it to
# be operational, and continue in GL mode. Otherwise, we rever to
# software rendering mode.
FRAMES = 4
DELAY = .25
import os
if (not "RENPY_RENDERER" in os.environ) and (renpy.get_renderer_info()["renderer"] == "gl"):
renpy.pause(0)
renpy.transition(Dissolve(DELAY))
ui.add(__GLTest(FRAMES, DELAY))
rv = ui.interact(suppress_overlay=True, suppress_underlay=False)
if not rv:
config.gl_enable = False
renpy.display_reset()
$ __gl_test()
# Hide the test image.
scene
return
+6 -16
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init -1105 python:
@@ -14,17 +14,6 @@ init -1105 python:
layout.compat_funcs = [ ]
layout.provided = set()
# This takes care of actually displaying button menus.
def _display_button_menu(menuitems):
narration = [ s for s, i in menuitems if i is None and s ]
menuitems = [ (s, i) for s, i in menuitems if i is not None or not s ]
if narration:
renpy.say(None, "\n".join(narration), interact=False)
return renpy.display_menu(menuitems)
init -1105 python hide:
# Called to indicate that the given kind of layout has been
@@ -62,7 +51,7 @@ init -1105 python hide:
if renpy.has_screen("load") and renpy.has_screen("save"):
defaults["load_save"] = layout.screen_load_save
if renpy.has_screen("yesno"):
if renpy.has_screen("yesno_prompt"):
defaults["yesno_prompt"] = layout.screen_yesno_prompt
if renpy.has_screen("preferences"):
@@ -211,7 +200,7 @@ init -1105 python hide:
@layout
def button_menu():
store.menu = _display_button_menu
config.narrator_menu = True
style.menu.box_spacing = 2
style.menu_window.set_parent(style.default)
@@ -405,7 +394,6 @@ init -1105 python hide:
An action that is run when the user chooses no.
"""
if renpy.has_screen("yesno_prompt"):
yes_action = [ Hide("yesno_prompt") ]
@@ -416,12 +404,14 @@ init -1105 python hide:
if no is not None:
no_action.append(no)
renpy.display.show_screen(
renpy.show_screen(
"yesno_prompt",
message=message,
yes_action=yes_action,
no_action=no_action)
renpy.restart_interaction()
return
if renpy.invoke_in_new_context(layout.yesno_prompt, None, message):
+114 -49
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# This file consists of renpy functions that aren't expected to be
@@ -67,6 +67,10 @@ init -1180 python:
# Should we start the game with scene black or just scene?
config.start_scene_black = False
# Voice and Sound samples.
config.sample_sound = None
config.sample_voice = None
# This is updated to give the user an idea of where a save is
# taking place.
@@ -90,8 +94,20 @@ init -1180 python:
def _default_empty_window():
store.narrator("", interact=False)
who = _last_say_who
if who is not None:
who = eval(who)
if who is None:
who = narrator
if isinstance(who, NVLCharacter):
nvl_show_core()
else:
store.narrator("", interact=False)
config.empty_window = _default_empty_window
style.skip_indicator = Style(style.default, heavy=True, help='The skip indicator.')
@@ -105,7 +121,6 @@ init -1180 python:
_intra_jumps = renpy.curry(_intra_jumps_core)
# The function that's used to translate strings in the game menu.
def _(s):
"""
@@ -120,11 +135,33 @@ init -1180 python:
return s
config.extend_interjection = "{fast}"
def extend(what, interact=True):
who = _last_say_who
if who is not None:
who = eval(who)
if who is None:
who = narrator
if isinstance(who, basestring):
who = unknown.copy(who)
# This ensures extend works even with NVL mode.
who.do_extend()
what = _last_say_what + config.extend_interjection + what
renpy.exports.say(who, what, interact=interact)
store._last_say_what = what
extend.record_say = False
# Are the windows currently hidden?
_windows_hidden = False
init -1180 python:
def toggle_skipping():
if not config.skipping:
@@ -139,22 +176,27 @@ init -1180 python:
config.help = None
def _help():
if not config.help:
def _help(help=None):
if help is None:
help = config.help
if help is None:
return
if renpy.has_label(config.help):
renpy.call_in_new_context(config.help)
if renpy.has_label(help):
renpy.call_in_new_context(help)
return
_preferences.fullscreen = False
try:
import webbrowser
webbrowser.open_new("file:///" + config.basedir + "/" + config.help)
webbrowser.open_new("file:///" + config.basedir + "/" + help)
except:
pass
# Called to make a screenshot happen.
def _screenshot():
import os.path
@@ -188,7 +230,16 @@ init -1180 python:
import traceback
traceback.print_exc()
if config.screenshot_callback is not None:
config.screenshot_callback(fn)
def _screenshot_callback(fn):
renpy.notify(_("Saved screenshot as %s.") % fn)
config.screenshot_callback = _screenshot_callback
_predict_screens = [ ]
init -1180 python hide:
def dump_styles():
@@ -200,7 +251,10 @@ init -1180 python hide:
def invoke_game_menu():
if renpy.context()._menu:
renpy.jump("_noisy_return")
if renpy.context()._main_menu:
return
else:
renpy.jump("_noisy_return")
else:
if config.game_menu_action:
renpy.display.behavior.run(config.game_menu_action)
@@ -296,32 +350,42 @@ init -1180 python hide:
config.hyperlink_styler = hyperlink_styler
config.hyperlink_callback = hyperlink_function
# Prediction of screens.
def predict():
for s in _predict_screens:
if renpy.has_screen(s):
renpy.predict_screen(s)
s = _game_menu_screen
if s is None:
return
if renpy.has_screen(s):
renpy.predict_screen(s)
return
if s.endswith("_screen"):
s = s[:-7]
if renpy.has_screen(s):
renpy.predict_screen(s)
return
config.predict_callbacks.append(predict)
def imagemap_auto_function(auto_param, variant):
rv = auto_param % variant
if renpy.loadable(rv):
return rv
else:
return None
config.extend_interjection = "{fast}"
init -1180 python:
def extend(what, interact=True):
who = _last_say_who
if who is not None:
who = eval(who)
if who is None:
who = narrator
if isinstance(who, basestring):
who = unknown.copy(who)
# This ensures extend works even with NVL mode.
who.do_extend()
what = _last_say_what + config.extend_interjection + what
renpy.exports.say(who, what, interact=interact)
store._last_say_what = what
extend.record_say = False
config.imagemap_auto_function = imagemap_auto_function
label _hide_windows:
@@ -346,17 +410,15 @@ label _hide_windows:
label _save_reload_game:
python hide:
renpy.take_screenshot((config.thumbnail_width, config.thumbnail_height))
renpy.music.stop()
ui.add(Solid((0, 0, 0, 255)))
ui.text("Saving game...",
size=32, xalign=0.5, yalign=0.5, color=(255, 255, 255, 255))
renpy.pause(0)
renpy.save("reload", "reload save game")
renpy.music.stop()
persistent._reload_save = "reload"
renpy.save("_reload-1", "reload save game")
ui.add(Solid((0, 0, 0, 255)))
ui.text("Reloading script...",
@@ -367,13 +429,12 @@ label _save_reload_game:
renpy.utter_restart()
label _load_reload_game:
if not persistent._reload_save:
return
if not renpy.can_load("_reload-1"):
return
python hide:
save = persistent._reload_save
persistent._reload_save = 0
renpy.rename_save("_reload-1", "_reload-2")
ui.add(Solid((0, 0, 0, 255)))
ui.text("Reloading game...",
@@ -382,7 +443,7 @@ label _load_reload_game:
ui.pausebehavior(0)
ui.interact(suppress_underlay=True, suppress_overlay=True)
renpy.load(save)
renpy.load("_reload-2")
return
@@ -406,7 +467,7 @@ init 1180 python:
_preferences.text_cps = config.default_text_cps
if config.default_afm_time is not None:
_preferences.default_afm_time = config.default_afm_time
_preferences.afm_time = config.default_afm_time
if config.default_afm_enable is not None:
_preferences.afm_enable = config.default_afm_enable
@@ -707,6 +768,8 @@ label _start:
for i in config.start_callbacks:
i()
$ renpy.block_rollback()
call _gl_test
call _load_reload_game from _call__load_reload_game_1
@@ -726,7 +789,9 @@ label _start:
$ renpy.block_rollback()
$ _old_game_menu_screen = _game_menu_screen
$ _old_predict_screens = _predict_screens
$ _game_menu_screen = None
$ _predict_screens = [ 'main_menu' ]
if renpy.has_label("splashscreen") and not _restart:
call expression "splashscreen" from _call_splashscreen_1
+3 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# Common stuff that's used by the various Ren'Py menus. This includes
@@ -35,6 +35,8 @@ label _quit_prompt:
return
label _main_menu_prompt:
$ renpy.loadsave.force_autosave()
if layout.yesno_prompt(None, layout.MAIN_MENU):
$ renpy.full_restart(transition=config.game_main_transition)
else:
+2 -2
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# This file contains code that sets up the various mixers, based on how
@@ -21,7 +21,7 @@ init -1130 python hide:
for i in xrange(0, 8):
renpy.music.register_channel(i)
renpy.music.register_channel("movie", "music", False, stop_on_mute=False)
renpy.music.register_channel("movie", "music", False, stop_on_mute=False, buffer_queue=False)
# Set up default names for some of the channels.
renpy.music.alias_channel(0, "sound")
+73 -47
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# This is an implementation of NVL-mode, which can be used to show
@@ -80,9 +80,10 @@ init -1100 python:
else:
return s
def nvl_show_screen(screen_name, **scope):
def __nvl_screen_dialogue():
"""
Shows an nvl-mode screen. Returns the "who" widget.
Returns widget_properties and dialogue for the current NVL
mode screen.
"""
widget_properties = { }
@@ -110,6 +111,14 @@ init -1100 python:
dialogue.append((who, what, who_id, what_id, window_id))
return widget_properties, dialogue
def __nvl_show_screen(screen_name, **scope):
"""
Shows an nvl-mode screen. Returns the "what" widget.
"""
widget_properties, dialogue = __nvl_screen_dialogue()
renpy.show_screen(screen_name, _transient=True, _widget_properties=widget_properties, dialogue=dialogue, **scope)
renpy.shown_window()
@@ -119,7 +128,7 @@ init -1100 python:
# Screen version.
if renpy.has_screen("nvl"):
return nvl_show_screen("nvl")
return __nvl_show_screen("nvl", items=[ ])
if renpy.in_rollback():
nvl_window = __s(style.nvl_window)['rollback']
@@ -245,6 +254,7 @@ init -1100 python:
nvl_clear()
def do_extend(self):
renpy.mode(self.mode)
store.nvl_list = store.nvl_list[:-1]
# The default NVLCharacter.
@@ -254,6 +264,7 @@ init -1100 python:
what_style='nvl_dialogue',
window_style='nvl_entry',
type='nvl',
mode='nvl',
clear=False,
kind=adv)
@@ -262,43 +273,64 @@ init -1100 python:
# Run clear at the start of the game.
config.start_callbacks.append(nvl_clear)
def nvl_menu(items):
renpy.mode('nvl_menu')
if nvl_list is None:
store.nvl_list = [ ]
screen = None
if renpy.has_screen("nvl_choice"):
screen = "nvl_choice"
elif renpy.has_screen("nvl"):
screen = "nvl"
if screen is not None:
# Screen version.
nvl_show_screen("nvl_choice", items=items)
widget_properties, dialogue = __nvl_screen_dialogue()
else:
return renpy.display_menu(
items,
widget_properties=widget_properties,
screen=screen,
scope={ "dialogue" : dialogue },
window_style=__s(style.nvl_menu_window),
choice_style=__s(style.nvl_menu_choice),
choice_chosen_style=__s(style.nvl_menu_choice_chosen),
choice_button_style=__s(style.nvl_menu_choice_button),
choice_chosen_button_style=__s(style.nvl_menu_choice_chosen_button),
type="nvl",
)
# Traditional version.
ui.layer("transient")
ui.clear()
ui.close()
ui.window(style=__s(style.nvl_window))
ui.vbox(style=__s(style.nvl_vbox))
# Traditional version.
ui.layer("transient")
ui.clear()
ui.close()
for i in nvl_list:
if not i:
continue
ui.window(style=__s(style.nvl_window))
ui.vbox(style=__s(style.nvl_vbox))
who, what, kw = i
rv = renpy.show_display_say(who, what, **kw)
for i in nvl_list:
if not i:
continue
renpy.display_menu(items, interact=False,
window_style=__s(style.nvl_menu_window),
choice_style=__s(style.nvl_menu_choice),
choice_chosen_style=__s(style.nvl_menu_choice_chosen),
choice_button_style=__s(style.nvl_menu_choice_button),
choice_chosen_button_style=__s(style.nvl_menu_choice_chosen_button),
)
who, what, kw = i
rv = renpy.show_display_say(who, what, **kw)
ui.close()
renpy.display_menu(items, interact=False,
window_style=__s(style.nvl_menu_window),
choice_style=__s(style.nvl_menu_choice),
choice_chosen_style=__s(style.nvl_menu_choice_chosen),
choice_button_style=__s(style.nvl_menu_choice_button),
choice_chosen_button_style=__s(style.nvl_menu_choice_chosen_button),
)
ui.close()
roll_forward = renpy.roll_forward_info()
@@ -312,29 +344,23 @@ init -1100 python:
config.nvl_adv_transition = None
config.adv_nvl_transition = None
init 1140 python:
if config.nvl_adv_transition or config.adv_nvl_transition:
# This is used to execute the nvl and adv mode transitions.
def _nvl_adv_callback(mode, old_modes):
def _nvl_adv_callback(event, interact, type, **kwargs):
if event != "begin" or not interact or renpy.get_transition():
return
old_type = renpy.last_interact_type()
if old_type == "say" and type == "nvl":
# We have an extra line in the nvl_list as we do this. So
# take it out for the duration of the nvl_show.
old_nvl_list = store.nvl_list
store.nvl_list = old_nvl_list[:-1]
nvl_show(config.adv_nvl_transition)
store.nvl_list = old_nvl_list
elif old_type == "nvl" and type == "say":
nvl_hide(config.nvl_adv_transition)
config.all_character_callbacks.insert(0, _nvl_adv_callback)
old = old_modes[0]
if config.adv_nvl_transition:
if mode == "nvl" or mode == "nvl_menu":
if old == "say" or old == "menu":
nvl_show(config.adv_nvl_transition)
if config.nvl_adv_transition:
if mode == "say" or mode == "menu":
if old == "nvl" or old == "nvl_menu":
nvl_hide(config.nvl_adv_transition)
config.mode_callbacks.append(_nvl_adv_callback)
python early hide:
+253 -30
View File
@@ -13,13 +13,17 @@ init -1140 python:
When in a menu, this returns from the menu.
"""
def __init__(self, value=True):
def __init__(self, value=None):
self.value = value
def __call__(self):
if renpy.context()._main_menu:
ShowMenu("main_menu")()
if self.value is None:
if renpy.context()._main_menu:
ShowMenu("main_menu")()
else:
return True
else:
return self.value
@@ -47,14 +51,24 @@ init -1140 python:
This causes another screen to be shown. `screen` is a string
giving the name of the screen. The keyword arguments are
passed to the screen being shown.
If not None, `transition` is use to show the new screen.
"""
def __init__(self, screen, **kwargs):
def __init__(self, screen, transition=None, **kwargs):
self.screen = screen
self.kwargs = kwargs
self.transition = transition
def predict(self):
renpy.predict_screen(self.screen, **self.kwargs)
def __call__(self):
renpy.show_screen(self.screen, **self.kwargs)
if self.transition is not None:
renpy.transition(self.transition)
renpy.restart_interaction()
def get_selected(self):
@@ -77,13 +91,21 @@ init -1140 python:
:doc: control_action
This causes the screen named `screen` to be hidden, if it is shown.
`transition`
If not None, a transition that occurs when hiding the screen.
"""
def __init__(self, screen):
def __init__(self, screen, transition=None):
self.screen = screen
self.transition = transition
def __call__(self):
renpy.hide_screen(self.screen)
if self.transition is not None:
renpy.transition(self.transition)
renpy.restart_interaction()
@@ -97,7 +119,48 @@ init -1140 python:
def __call__(self):
_screenshot()
def HideInterface():
"""
:doc other_action
Causes the interface to be hidden until the user clicks.
"""
return ui.callsinnewcontext("_hide_windows")
class With(Action):
"""
:doc: other_action
Causes `transition` to occur.
"""
def __init__(self, transition):
self.transition = transition
def __call__(self):
renpy.transition(self.transition)
renpy.restart_interaction()
class Notify(Action):
"""
:doc: other_action
Displays `message` using :func:`renpy.notify`.
"""
def __init__(self, message):
self.message = message
def predict(self):
renpy.predict_screen("notify")
def __call__(self):
renpy.notify(self.message)
class InvertSelected(Action):
"""
:doc: other_action
@@ -120,8 +183,24 @@ init -1140 python:
def periodic(self, st):
return self.action.periodic(st)
def predict(self):
self.action.predict()
def If(expression, true=None, false=None):
"""
:doc: other_action
This returns `true` if `expression` is true, and `false`
otherwise. Use this to select an action based on an expression.
Note that the default, None, can be used as an action that causes
a button to be disabled.
"""
if expression:
return true
else:
return false
##########################################################################
# Menu-related actions.
@@ -158,6 +237,11 @@ init -1140 python:
def __init__(self, screen=None):
self.screen = screen
def predict(self):
if renpy.has_screen(self.screen):
renpy.predict_screen(self.screen)
def __call__(self):
if not self.get_sensitive():
@@ -167,19 +251,24 @@ init -1140 python:
if not (renpy.has_screen(screen) or renpy.has_label(screen)):
screen = screen + "_screen"
# Ugly. We have different code depending on if we're in the
# game menu or not.
if renpy.context()._menu:
if renpy.has_screen(screen):
renpy.transition(config.intra_transition)
renpy.show_screen(screen, _transient=True)
renpy.restart_interaction()
elif renpy.has_label(screen):
renpy.transition(config.intra_transition)
renpy.scene(layer='screens')
ui.layer("screens")
ui.remove_above(None)
ui.close()
renpy.jump(screen)
else:
@@ -264,6 +353,7 @@ init -1140 python:
def __call__(self):
if self.confirm:
renpy.loadsave.force_autosave()
layout.yesno_screen(layout.QUIT, Quit(False))
else:
renpy.quit()
@@ -293,10 +383,27 @@ init -1140 python:
def get_sensitive(self):
return config.allow_skipping and (not renpy.context()._main_menu)
class Help(Action):
"""
:doc: other_action
Displays help.
`help`
If this is a string giving a label in the programe, then
that label is called in a new context when the button is
chosen. Otherwise, it should be a string giving a file
that is opened in a web browser. If None, the value of
config.help is used in the same wayt.
"""
def __init__(self, help=None):
self.help = help
def AutoForward(Action):
return Preference("auto-forward")
def __call__(self):
_help(self.help)
##########################################################################
# Functions that set variables or fields.
@@ -321,7 +428,7 @@ init -1140 python:
def get_selected(self):
return getattr(self.object, self.field) == self.value
def SetVariable(variable, value):
"""
@@ -488,7 +595,7 @@ init -1140 python:
def get_selected(self):
return renpy.music.get_playing(self.channel) == self.file
def periodic(self):
def periodic(self, st):
if self.selected != self.get_selected():
renpy.restart_interaction()
@@ -613,7 +720,7 @@ init -1140 python:
if self.value == self.old_value:
return
fraction = st - (self.start_time) / self.delay
fraction = (st - self.start_time) / self.delay
fraction = min(1.0, fraction)
value = self.old_value + fraction * (self.value - self.old_value)
@@ -669,8 +776,8 @@ init -1140 python:
def changed(self, value):
if self.max_is_zero:
if value == 0:
value = self.range
if value == self.range:
value = 0
else:
value = value + 1
@@ -737,7 +844,7 @@ init -1140 python:
def get_adjustment(self):
w = renpy.get_widget(None, self.viewport)
if not isinstance(w, Viewport):
raise Exception("The displayable with id %r is not declared, or not a viewport.")
raise Exception("The displayable with id %r is not declared, or not a viewport." % self.viewport)
return w.xadjustment
@@ -759,7 +866,7 @@ init -1140 python:
def get_adjustment(self):
w = renpy.get_widget(None, self.viewport)
if not isinstance(w, Viewport):
raise Exception("The displayable with id %r is not declared, or not a viewport.")
raise Exception("The displayable with id %r is not declared, or not a viewport." % self.viewport)
return w.yadjustment
@@ -769,6 +876,8 @@ init -1140 python:
##########################################################################
# File functions
config.linear_saves_page_size = None
if persistent._file_page is None:
persistent._file_page = "1"
@@ -776,8 +885,15 @@ init -1140 python:
if page is None:
page = persistent._file_page
if config.linear_saves_page_size is not None:
try:
page = int(page)
name = int(name)
return str((page - 1) * config.linear_saves_page_size + name)
except ValueError:
pass
return str(page) + "-" + str(name)
def FileLoadable(name, page=None):
@@ -873,6 +989,9 @@ init -1140 python:
If true, then this file will be marked as the newest save
file when it's saved. (Set this to false for a quicksave,
for example.)
`page`
The name of the page that it will be saved to.
"""
def __init__(self, name, confirm=True, newest=True, page=None):
@@ -892,7 +1011,7 @@ init -1140 python:
if self.confirm:
layout.yesno_screen(layout.OVERWRITE_SAVE, FileSave(self.name, False, self.newest, self.page))
return
renpy.save(fn, extra_info=save_name)
if self.newest:
@@ -909,6 +1028,9 @@ init -1140 python:
return True
def get_selected(self):
if not self.confirm:
return False
return persistent._file_newest == __filename(self.name, self.page)
class FileLoad(Action):
@@ -944,6 +1066,9 @@ init -1140 python:
return renpy.scan_saved_game(__filename(self.name, self.page))
def get_selected(self):
if not self.confirm:
return False
return persistent._file_newest == __filename(self.name, self.page)
class FileDelete(Action):
@@ -990,9 +1115,9 @@ init -1140 python:
"""
if renpy.current_screen().screen_name[0] == "load":
return FileLoad(name, page)
return FileLoad(name, page=page)
else:
return FileSave(name, page)
return FileSave(name, page=page)
class FilePage(Action):
@@ -1016,7 +1141,7 @@ init -1140 python:
def get_sensitive(self):
if self.page == "auto" and not config.has_autosave:
return False
elif self.page == "quicksave" and not config.has_quicksave:
elif self.page == "quick" and not config.has_quicksave:
return False
else:
return True
@@ -1024,16 +1149,82 @@ init -1140 python:
def get_selected(self):
return self.page == persistent._file_page
def FilePageName(auto="a", quick="q"):
"""
:doc: file_action_function
Returns the name of the current file page, as a string. If a normal
page, this returns the page number. Otherwise, it returns
`auto` or `quick`.
"""
page = persistent._file_page
if page == "quick":
return quick
elif page == "auto":
return auto
else:
return page
def FileSlotName(slot, slots_per_page, auto="a", quick="q", format="%s%d"):
"""
:doc: file_action_function
Returns the name of the numbered slot. This assumes that slots on
normal pages are numbered in a linear order starting with 1, and
that page numbers start with 1. When slot is 2, and slots_per_page
is 10, and the other variables are the defauts:
* When the first page is slowing, this returns "2".
* When the second page is showing, this returns "12".
* When the auto page is showing, this returns "a2".
* When the quicksave page is showing, this returns "q2".
`slot`
The number of the slot to access.
`slots_per_page`
The number of slots per page.
`auto`
A prefix to use for the auto page.
`quick`
A prefix to use for the quick page.
`format`
The formatting code to use. This is given two arguments: A string
giving the page prefix, and an integer giving the slot number.
"""
page = persistent._file_page
if page == "quick":
prefix = quick
page = 0
elif page == "auto":
prefix = auto
page = 0
else:
prefix = ""
page = int(page) - 1
return format % (prefix, page * slots_per_page + slot)
class FilePageNext(Action):
"""
:doc: file_action
Goes to the next file page. (It's always possible to get to the
next file page.)
Goes to the next file page.
`max`
If set, this should be an integer that gives the number of
the maximum file page we can go to.
"""
def __init__(self):
def __init__(self, max=None):
page = persistent._file_page
@@ -1047,7 +1238,14 @@ init -1140 python:
page = "1"
else:
page = str(int(page) + 1)
page = int(page) + 1
if max is not None:
if page > max:
page = None
if page is not None:
page = str(page)
self.page = page
@@ -1058,6 +1256,9 @@ init -1140 python:
persistent._file_page = self.page
renpy.restart_interaction()
def get_sensitive(self):
return self.page is not None
class FilePagePrevious(Action):
"""
@@ -1310,7 +1511,7 @@ init -1140 python:
# What we do on a quit, by default.
config.quit_action = ShowMenu("_confirm_quit")
config.quit_action = ui.gamemenus("_confirm_quit")
# This is used to ensure a fixed click-to-continue indicator is shown on
@@ -1318,3 +1519,25 @@ init -1140 python:
screen _ctc:
add ctc
# These are used by renpy.notify.
transform _notify_transform:
# These control the position.
xalign .02 yalign .015
# These control the actions on show and hide.
on show:
alpha 0
linear .25 alpha 1.0
on hide:
linear .5 alpha 0.0
screen notify:
zorder 100
text message at _notify_transform
# This controls how long it takes between when the screen is
# first shown, and when it begins hiding.
timer 3.25 action Hide('notify')
+26 -12
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# This file contains code that creates a few new statements. We'll
@@ -137,19 +137,24 @@ python early hide:
def predict_play_music(p):
return [ ]
def lint_play_music(p):
def lint_play_music(p, channel="music"):
file = _try_eval(p["file"], 'filename')
if p["channel"] is not None:
_try_eval(p["channel"], 'channel')
if p["channel"] is not None:
channel = _try_eval(p["channel"], 'channel')
if not isinstance(file, list):
file = [ file ]
for fn in file:
if isinstance(fn, basestring) and not renpy.loadable(fn):
renpy.error("%r is not loadable" % fn)
if isinstance(fn, basestring):
try:
if not renpy.music.playable(fn, channel):
renpy.error("%r is not loadable" % fn)
except:
pass
renpy.statements.register('play music',
parse=parse_play_music,
execute=execute_play_music,
@@ -254,11 +259,14 @@ python early hide:
fadeout=fadeout,
fadein=eval(p["fadein"]),
channel=channel)
def lint_play_sound(p, lint_play_music=lint_play_music):
return lint_play_music(p, channel="sound")
renpy.statements.register('play sound',
parse=parse_play_music,
execute=execute_play_sound,
lint=lint_play_music)
lint=lint_play_sound)
def execute_queue_sound(p):
if p["channel"] is not None:
@@ -334,7 +342,7 @@ python early hide:
if not renpy.music.channel_defined(channel):
renpy.error("channel %r is not defined" % channel)
lint_play_music(p)
lint_play_music(p, channel)
def lint_stop_generic(p):
channel = eval(p["channel"])
@@ -495,7 +503,11 @@ python early hide:
l.expect_eol()
return dict(name=name)
def predict_screen(p):
if not p["parameters"]:
renpy.predict_screen(p["name"])
def execute_show_screen(p):
name = p["name"]
@@ -515,7 +527,7 @@ python early hide:
kwargs = { }
for k, v in parameters.iteritems():
kwargs[k] = eval(v)
kwargs[str(k)] = eval(v)
store._return = renpy.call_screen(name, **kwargs)
@@ -532,11 +544,13 @@ python early hide:
renpy.statements.register("show screen",
parse=parse_show_call_screen,
execute=execute_show_screen,
predict=predict_screen,
lint=lint_screen)
renpy.statements.register("call screen",
parse=parse_show_call_screen,
execute=execute_call_screen,
predict=predict_screen,
lint=lint_screen)
renpy.statements.register("hide screen",
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# This file is responsible for creating and defining the default styles
+307 -282
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init -1110 python:
@@ -71,9 +71,7 @@ init -1110 python hide:
style.vscrollbar.bar_vertical = True
style.vscrollbar.bar_invert = True
# This recolors the given image using one or two colors.
@theme
def OneOrTwoColor(image, color):
@@ -82,246 +80,68 @@ init -1110 python hide:
else:
return im.Twocolor(image, color, color)
@theme
def roundrect_frames(
less_rounded,
frame):
def roundrect_based_theme(name, file_prefix, Box=None, frame_png=None):
theme.clear_frames()
style.frame.background = RoundRect(frame, less_rounded)
if Box is None:
def Box(color, ignored):
return Frame(theme.OneOrTwoColor(file_prefix + "_box.png", color), 12, 12)
style.frame.xpadding = 6
style.frame.ypadding = 6
if frame_png is not None:
def FrameBox(color, ignored):
return Frame(theme.OneOrTwoColor(file_prefix + frame_png, color), 12, 12)
else:
FrameBox = Box
@theme
def roundrect_buttons(text_size,
less_rounded,
widget,
widget_hover,
widget_text,
widget_selected,
disabled,
disabled_text):
theme.clear_buttons()
style.button.background = RoundRect(widget, less_rounded)
style.button.hover_background = RoundRect(widget_hover, less_rounded)
style.button.insensitive_background = RoundRect(disabled, less_rounded)
style.button_text.size = text_size
style.button_text.color = widget_text
style.button_text.selected_color = widget_selected
style.button_text.insensitive_color = disabled_text
if less_rounded:
style.button.xpadding = 6
else:
style.button.xpadding = 12
style.button.ypadding = 1
style.button.xmargin = 1
style.button.ymargin = 1
style.button_text.xalign = 0.5
style.button_text.yalign = 0.5
style.button_text.text_align = 0.5
@theme
def roundrect_large_buttons(
text_size,
less_rounded,
widget,
widget_hover,
widget_text,
widget_selected,
disabled,
disabled_text):
theme.clear_large_buttons()
if less_rounded:
style.large_button.xpadding = 6
else:
style.large_button.xpadding = 12
style.large_button.ypadding = 1
style.large_button.xmargin = 1
style.large_button.ymargin = 1
style.large_button.background = RoundRect(widget, less_rounded)
style.large_button.hover_background = RoundRect(widget_hover, less_rounded)
style.large_button.insensitive_background = RoundRect(disabled, less_rounded)
style.large_button_text.size = text_size
style.large_button_text.color = widget_text
style.large_button_text.selected_color = widget_selected
style.large_button_text.insensitive_color = disabled_text
style.large_button_text.xalign = 0
style.large_button_text.yalign = 0
@theme
def roundrect_labels(
text_size,
label):
theme.clear_labels()
style.label_text.size = text_size
style.label_text.color = label
@theme
def roundrect_prompts(
text_size,
label):
theme.clear_prompts()
style.prompt_text.size = text_size
style.prompt_text.color = label
style.prompt.xalign = 0.5
style.prompt_text.text_align = 0.5
style.prompt_text.layout = "subtitle"
@theme
def roundrect_bars(
widget,
widget_hover):
theme.clear_bars()
def img(name, color, x, y):
rv = theme.OneOrTwoColor("_roundrect/" + name + ".png", color)
if x is not None:
rv = Frame(rv, x, y)
return rv
# Bars.
style.bar.ymaximum = 24
style.bar.left_gutter = 6
style.bar.right_gutter = 6
style.bar.thumb_offset = 6
style.bar.left_bar = img("rrslider_full", widget, 12, 0)
style.bar.right_bar = img("rrslider_empty", widget, 12, 0)
style.bar.thumb = img("rrslider_thumb", widget, None, None)
style.bar.hover_left_bar = img("rrslider_full", widget_hover, 12, 0)
style.bar.hover_right_bar = img("rrslider_empty", widget_hover, 12, 0)
style.bar.hover_thumb = img("rrslider_thumb", widget_hover, None, None)
style.vbar.xmaximum = 24
style.vbar.top_gutter = 6
style.vbar.bottom_gutter = 6
style.vbar.thumb_offset = 6
style.vbar.bottom_bar = img("rrvslider_full", widget, 0, 12)
style.vbar.top_bar = img("rrvslider_empty", widget, 0, 12)
style.vbar.thumb = img("rrvslider_thumb", widget, None, None)
style.vbar.hover_bottom_bar = img("rrvslider_full", widget_hover, 0, 12)
style.vbar.hover_top_bar = img("rrvslider_empty", widget_hover, 0, 12)
style.vbar.hover_thumb = img("rrvslider_thumb", widget_hover, None, None)
# Sliders.
style.slider.ymaximum = 24
style.slider.left_gutter = 6
style.slider.right_gutter = 6
style.slider.thumb_offset = 6
style.slider.left_bar = img("rrslider_full", widget, 12, 0)
style.slider.right_bar = img("rrslider_empty", widget, 12, 0)
style.slider.thumb = img("rrslider_thumb", widget, None, None)
style.slider.hover_left_bar = img("rrslider_full", widget_hover, 12, 0)
style.slider.hover_right_bar = img("rrslider_empty", widget_hover, 12, 0)
style.slider.hover_thumb = img("rrslider_thumb", widget_hover, None, None)
style.vslider.xmaximum = 24
style.vslider.top_gutter = 6
style.vslider.bottom_gutter = 6
style.vslider.thumb_offset = 6
style.vslider.bottom_bar = img("rrvslider_full", widget, 0, 12)
style.vslider.top_bar = img("rrvslider_empty", widget, 0, 12)
style.vslider.thumb = img("rrvslider_thumb", widget, None, None)
style.vslider.hover_bottom_bar = img("rrvslider_full", widget_hover, 0, 12)
style.vslider.hover_top_bar = img("rrvslider_empty", widget_hover, 0, 12)
style.vslider.hover_thumb = img("rrvslider_thumb", widget_hover, None, None)
# Scrollbars.
style.scrollbar.left_gutter = 6
style.scrollbar.right_gutter = 6
style.scrollbar.thumb_offset = 6
style.scrollbar.ymaximum = 12
style.scrollbar.left_bar = img("rrscrollbar", widget, 12, 0)
style.scrollbar.right_bar = img("rrscrollbar", widget, 12, 0)
style.scrollbar.thumb = img("rrscrollbar_thumb", widget, None, None)
style.scrollbar.hover_left_bar = img("rrscrollbar", widget_hover, 12, 0)
style.scrollbar.hover_right_bar = img("rrscrollbar", widget_hover, 12, 0)
style.scrollbar.hover_thumb = img("rrscrollbar_thumb", widget_hover, None, None)
style.vscrollbar.top_gutter = 6
style.vscrollbar.bottom_gutter = 6
style.vscrollbar.thumb_offset = 6
style.vscrollbar.xmaximum = 12
style.vscrollbar.left_bar = img("rrvscrollbar", widget, 0, 12)
style.vscrollbar.right_bar = img("rrvscrollbar", widget, 0, 12)
style.vscrollbar.thumb = img("rrvscrollbar_thumb", widget, None, None)
style.vscrollbar.hover_left_bar = img("rrvscrollbar", widget_hover, 0, 12)
style.vscrollbar.hover_right_bar = img("rrvscrollbar", widget_hover, 0, 12)
style.vscrollbar.hover_thumb = img("rrvscrollbar_thumb", widget_hover, None, None)
@theme
def roundrect(
widget = (0, 60, 120, 255),
widget_hover = (0, 80, 160, 255),
widget_text = (200, 225, 255, 255),
widget_selected = (255, 255, 200, 255),
disabled = (64, 64, 64, 255),
disabled_text = (200, 200, 200, 255),
label = (255, 255, 255, 255),
frame = (100, 150, 200, 255),
text_size=None,
small_text_size=None,
less_rounded = False,
# Compat for the old roundrect theme.
window = None,
button_menu = None,
rounded_window = True,
outline_bars = False,
mm_root = None,
gm_root = None):
if button_menu is None:
if (config.script_version is not None) and (config.script_version < (6, 9, 0)):
button_menu = True
else:
button_menu = False
layout.defaults()
if config.screen_width <= 640:
text_size = text_size or 18
small_text_size = small_text_size or 12
less_rounded = True
else:
text_size = text_size or 22
small_text_size = small_text_size or 16
radius = 12
theme.roundrect_frames(
def frames(
less_rounded,
frame)
frame):
theme.roundrect_buttons(
theme.clear_frames()
style.frame.background = Box(frame, less_rounded)
style.frame.xpadding = 6
style.frame.ypadding = 6
setattr(theme, name + "_frames", frames)
def buttons(text_size,
less_rounded,
widget,
widget_hover,
widget_text,
widget_selected,
disabled,
disabled_text):
theme.clear_buttons()
style.button.background = Box(widget, less_rounded)
style.button.hover_background = Box(widget_hover, less_rounded)
style.button.insensitive_background = Box(disabled, less_rounded)
style.button_text.size = text_size
style.button_text.color = widget_text
style.button_text.selected_color = widget_selected
style.button_text.insensitive_color = disabled_text
if less_rounded:
style.button.xpadding = 6
else:
style.button.xpadding = 12
style.button.ypadding = 1
style.button.xmargin = 1
style.button.ymargin = 1
style.button_text.xalign = 0.5
style.button_text.yalign = 0.5
style.button_text.text_align = 0.5
setattr(theme, name + "_buttons", buttons)
def large_buttons(
text_size,
less_rounded,
widget,
@@ -329,55 +149,260 @@ init -1110 python hide:
widget_text,
widget_selected,
disabled,
disabled_text)
disabled_text):
theme.roundrect_large_buttons(
small_text_size,
less_rounded,
widget,
widget_hover,
widget_text,
widget_selected,
disabled,
disabled_text)
theme.clear_large_buttons()
theme.roundrect_labels(
text_size,
label)
theme.roundrect_prompts(
text_size,
label)
theme.roundrect_bars(
widget,
widget_hover)
if mm_root is not None:
style.mm_root.background = mm_root
if gm_root is not None:
style.gm_root.background = gm_root
if window is not None:
if rounded_window:
style.window.background = RoundRect(window, less_rounded)
style.window.xpadding = 6
style.window.xmargin = 6
style.window.ypadding = 6
style.window.ymargin = 6
if less_rounded:
style.large_button.xpadding = 6
else:
style.window.background = Solid(window)
style.window.xpadding = 6
style.window.xmargin = 0
style.window.ypadding = 6
style.window.ymargin = 0
style.large_button.xpadding = 12
style.large_button.ypadding = 1
style.large_button.xmargin = 1
style.large_button.ymargin = 1
style.large_button.background = Box(widget, less_rounded)
style.large_button.hover_background = Box(widget_hover, less_rounded)
style.large_button.insensitive_background = Box(disabled, less_rounded)
style.large_button_text.size = text_size
style.large_button_text.color = widget_text
style.large_button_text.selected_color = widget_selected
style.large_button_text.insensitive_color = disabled_text
style.large_button_text.xalign = 0
style.large_button_text.yalign = 0
setattr(theme, name + "_large_buttons", large_buttons)
def labels(
text_size,
label):
theme.clear_labels()
style.label_text.size = text_size
style.label_text.color = label
setattr(theme, name + "_labels", labels)
def prompts(
text_size,
label):
theme.clear_prompts()
style.prompt_text.size = text_size
style.prompt_text.color = label
style.prompt.xalign = 0.5
style.prompt_text.text_align = 0.5
style.prompt_text.layout = "subtitle"
setattr(theme, name + "_prompts", prompts)
def bars(
widget,
widget_hover):
theme.clear_bars()
def img(name, color, x, y):
rv = theme.OneOrTwoColor(file_prefix + name + ".png", color)
if x is not None:
rv = Frame(rv, x, y, tile=True)
return rv
# Bars.
style.bar.ymaximum = 24
style.bar.left_gutter = 6
style.bar.right_gutter = 6
style.bar.thumb_offset = 6
style.bar.left_bar = img("slider_full", widget, 12, 0)
style.bar.right_bar = img("slider_empty", widget, 12, 0)
style.bar.thumb = img("slider_thumb", widget, None, None)
style.bar.hover_left_bar = img("slider_full", widget_hover, 12, 0)
style.bar.hover_right_bar = img("slider_empty", widget_hover, 12, 0)
style.bar.hover_thumb = img("slider_thumb", widget_hover, None, None)
style.vbar.xmaximum = 24
style.vbar.top_gutter = 6
style.vbar.bottom_gutter = 6
style.vbar.thumb_offset = 6
style.vbar.bottom_bar = img("vslider_full", widget, 0, 12)
style.vbar.top_bar = img("vslider_empty", widget, 0, 12)
style.vbar.thumb = img("vslider_thumb", widget, None, None)
style.vbar.hover_bottom_bar = img("vslider_full", widget_hover, 0, 12)
style.vbar.hover_top_bar = img("vslider_empty", widget_hover, 0, 12)
style.vbar.hover_thumb = img("vslider_thumb", widget_hover, None, None)
# Sliders.
style.slider.ymaximum = 24
style.slider.left_gutter = 6
style.slider.right_gutter = 6
style.slider.thumb_offset = 6
style.slider.left_bar = img("slider_full", widget, 12, 0)
style.slider.right_bar = img("slider_empty", widget, 12, 0)
style.slider.thumb = img("slider_thumb", widget, None, None)
style.slider.hover_left_bar = img("slider_full", widget_hover, 12, 0)
style.slider.hover_right_bar = img("slider_empty", widget_hover, 12, 0)
style.slider.hover_thumb = img("slider_thumb", widget_hover, None, None)
style.vslider.xmaximum = 24
style.vslider.top_gutter = 6
style.vslider.bottom_gutter = 6
style.vslider.thumb_offset = 6
style.vslider.bottom_bar = img("vslider_full", widget, 0, 12)
style.vslider.top_bar = img("vslider_empty", widget, 0, 12)
style.vslider.thumb = img("vslider_thumb", widget, None, None)
style.vslider.hover_bottom_bar = img("vslider_full", widget_hover, 0, 12)
style.vslider.hover_top_bar = img("vslider_empty", widget_hover, 0, 12)
style.vslider.hover_thumb = img("vslider_thumb", widget_hover, None, None)
if button_menu:
layout.button_menu()
# Scrollbars.
style.scrollbar.left_gutter = 6
style.scrollbar.right_gutter = 6
style.scrollbar.thumb_offset = 6
style.scrollbar.ymaximum = 12
style.scrollbar.left_bar = img("scrollbar", widget, 12, 0)
style.scrollbar.right_bar = img("scrollbar", widget, 12, 0)
style.scrollbar.thumb = img("scrollbar_thumb", widget, None, None)
style.scrollbar.hover_left_bar = img("scrollbar", widget_hover, 12, 0)
style.scrollbar.hover_right_bar = img("scrollbar", widget_hover, 12, 0)
style.scrollbar.hover_thumb = img("scrollbar_thumb", widget_hover, None, None)
style.vscrollbar.top_gutter = 6
style.vscrollbar.bottom_gutter = 6
style.vscrollbar.thumb_offset = 6
style.vscrollbar.xmaximum = 12
style.vscrollbar.left_bar = img("vscrollbar", widget, 0, 12)
style.vscrollbar.right_bar = img("vscrollbar", widget, 0, 12)
style.vscrollbar.thumb = img("vscrollbar_thumb", widget, None, None)
style.vscrollbar.hover_left_bar = img("vscrollbar", widget_hover, 0, 12)
style.vscrollbar.hover_right_bar = img("vscrollbar", widget_hover, 0, 12)
style.vscrollbar.hover_thumb = img("vscrollbar_thumb", widget_hover, None, None)
setattr(theme, name + "_bars", bars)
def main(
widget = (0, 60, 120, 255),
widget_hover = (0, 80, 160, 255),
widget_text = (200, 225, 255, 255),
widget_selected = (255, 255, 200, 255),
disabled = (64, 64, 64, 255),
disabled_text = (200, 200, 200, 255),
label = (255, 255, 255, 255),
frame = (100, 150, 200, 255),
text_size=None,
small_text_size=None,
less_rounded = False,
# Compat for the old roundrect theme.
window = None,
button_menu = None,
rounded_window = True,
outline_bars = False,
mm_root = None,
gm_root = None):
if button_menu is None:
if (config.script_version is not None) and (config.script_version < (6, 9, 0)):
button_menu = True
else:
button_menu = False
layout.defaults()
if config.screen_width <= 640:
text_size = text_size or 18
small_text_size = small_text_size or 12
less_rounded = True
else:
text_size = text_size or 22
small_text_size = small_text_size or 16
radius = 12
frames(
less_rounded,
frame)
buttons(
text_size,
less_rounded,
widget,
widget_hover,
widget_text,
widget_selected,
disabled,
disabled_text)
large_buttons(
small_text_size,
less_rounded,
widget,
widget_hover,
widget_text,
widget_selected,
disabled,
disabled_text)
labels(
text_size,
label)
prompts(
text_size,
label)
bars(
widget,
widget_hover)
if mm_root is not None:
style.mm_root.background = mm_root
if gm_root is not None:
style.gm_root.background = gm_root
if window is not None:
if rounded_window:
style.window.background = RoundRect(window, less_rounded)
style.window.xpadding = 6
style.window.xmargin = 6
style.window.ypadding = 6
style.window.ymargin = 6
else:
style.window.background = Solid(window)
style.window.xpadding = 6
style.window.xmargin = 0
style.window.ypadding = 6
style.window.ymargin = 0
if button_menu:
layout.button_menu()
setattr(theme, name, main)
roundrect_based_theme("roundrect", "_roundrect/rr", RoundRect)
roundrect_based_theme("bordered", "_theme_bordered/br")
roundrect_based_theme("diamond", "_theme_diamond/d")
roundrect_based_theme("tv", "_theme_tv/t")
roundrect_based_theme("glow", "_theme_glow/g", None, "_outline.png")
@theme
def ancient():
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# This extra contains a basic implementation of voice support. Right
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2008 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init python:
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2008 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init:
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2008 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init -1170 python hide:
+2 -2
View File
@@ -1,7 +1,7 @@
# Copyright 2004-2008 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# Copyright 2004-2006 PyTom
# Copyright 2004-2011 Tom Rothamel
#
# Please see the LICENSE.txt distributed with Ren'Py for permission to
# copy and modify.
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2008 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init python hide:
+2 -2
View File
@@ -1,7 +1,7 @@
# Copyright 2004-2008 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# Copyright 2004-2007 PyTom
# Copyright 2004-2011 Tom Rothamel
#
# Please see the LICENSE.txt distributed with Ren'Py for permission to
# copy and modify.
+52 -23
View File
@@ -1,29 +1,34 @@
# This file contains code that helps support the development of Ren'Py
# games.
screen _developer:
window style "gm_root"
frame:
style_group "_developer"
align (.025, .05)
has vbox:
first_spacing 10
label "Developer Menu"
textbutton _(u"Return") action Return()
textbutton _(u"Reload Game (Shift + R)") action ui.callsinnewcontext("_save_reload_game")
textbutton _(u"Variable Viewer") action Jump("_debugger_screen")
textbutton _(u"Theme Test") action Jump("_theme_test")
textbutton _(u"Style Hierarchy") action Jump("_style_hierarchy")
textbutton _(u"Image Location Picker") action Jump("_image_location_picker")
textbutton _(u"Filename List") action Jump("_filename_list")
init python hide:
style._developer_button = Style(style.button)
style._developer_button.size_group = "_developer"
label _developer_screen:
python hide:
ui.window(style=style.gm_root)
ui.null()
ui.frame(xalign=.025, yalign=.05, style=style.menu_frame)
ui.vbox(box_first_spacing=10)
layout.label(u"Developer Menu", None)
sg = "developer_menu"
layout.button(u"Return", None, clicked=ui.returns(True), size_group=sg)
layout.button(u"Reload Game (Shift+R)", None, clicked=ui.callsinnewcontext("_save_reload_game"), size_group=sg)
layout.button(u"Variable Viewer", None, clicked=ui.jumps("_debugger_screen"), size_group=sg)
layout.button(u"Theme Test", None, clicked=ui.jumps("_theme_test"), size_group=sg)
layout.button(u"Style Hierarchy", None, clicked=ui.jumps("_style_hierarchy"), size_group=sg)
# layout.button(u"FPS Meter", None, clicked=ui.jumps("_fps_meter"), size_group=sg)
layout.button(u"Image Location Picker", None, clicked=ui.jumps("_image_location_picker"), size_group=sg)
ui.close()
ui.interact()
call screen _developer
return
@@ -369,8 +374,8 @@ init python:
sr = renpy.render(Solid("#0ff4"), w, h, st, at)
rv.blit(sr, (minx, miny))
text.append("Imagemap rectangle: %r" % ((minx, miny, maxx, maxy),))
text.append("Cropping rectangle: %r" % ((minx, miny, w, h),))
# text.append("Imagemap rectangle: %r" % ((minx, miny, maxx, maxy),))
text.append("Rectangle: %r" % ((minx, miny, w, h),))
if self.mouse:
mx, my = self.mouse
@@ -466,6 +471,30 @@ label _image_location_picker:
renpy.jump("_image_location_picker")
label _filename_list:
python hide:
import os
f = file("files.txt", "w")
for dirname, dirs, files in os.walk(config.gamedir):
dirs.sort()
files.sort()
for fn in files:
fn = os.path.join(dirname, fn)
fn = fn[len(config.gamedir) + 1:]
print >>f, fn
print fn
f.close()
renpy.launch_editor(["files.txt"], transient=1)
jump _developer_screen
init python:
config.underlay.append(im.Tile("_transparent_tile.png"))
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init python:
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init python:
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init python:
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init python:
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init python:
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init python:
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init python hide:
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init python:
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init python:
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init python:
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init python:
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init python:
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init python:
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init python:
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init python hide:
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init python:
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init python:
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init python:
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init python:
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init python:
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init python hide:
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init python:
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2010 PyTom <pytom@bishoujo.us>
# Copyright 2004-2011 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
init python:
Binary file not shown.

After

Width:  |  Height:  |  Size: 266 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 489 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 313 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 287 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 356 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 289 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 359 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 405 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 313 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 763 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 862 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 524 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 450 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 781 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 545 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 611 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 460 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 816 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 529 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 315 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 408 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 412 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 B

-1
View File
@@ -1 +0,0 @@
dist/console.exe
+52 -65
View File
@@ -9,6 +9,10 @@ import time
import zlib
import compileall
import shutil
import subprocess
import makeupdate
import glob
import time
zlib.Z_DEFAULT_COMPRESSION = 9
@@ -20,7 +24,7 @@ def data(fn):
if fn.startswith("renpy.app"):
return rv
if fn.endswith(".rpy") or fn.endswith(".py") or fn.endswith(".txt"):
if fn.endswith(".rpy") or fn.endswith(".rpym") or fn.endswith(".py") or fn.endswith(".txt"):
rv = rv.replace("\n", "\r\n")
rv = rv.replace("\r\r\n", "\r\n")
@@ -87,7 +91,11 @@ def tree(root):
if ".svn" in dirs:
dirs.remove(".svn")
if ".doctrees" in dirs:
dirs.remove(".doctrees")
for f in filenames:
if f[-1] == '~' or f[0] == '.':
continue
@@ -113,104 +121,72 @@ def main():
prefix = sys.argv[1]
shutil.copy("tutorial/game/screens.rpy", "template/game/screens.rpy")
# Update the update-version.txt file.
p = subprocess.Popen(["bzr", "revno"], stdout=subprocess.PIPE)
revno = p.stdout.read().strip() + "-" + str(time.time())
p.wait()
f = file("lib/update-version.txt", "w")
f.write(revno + " base\n")
f.close()
# Compile all the python files.
compileall.compile_dir("renpy/", ddir=prefix + "/renpy/", force=1)
os.environ['RENPY_PATH_ELIDE'] = '/home/tom/ab/renpy:' + prefix
# Chmod the mac app.
os.chmod("./renpy.app/Contents/MacOS/Ren'Py Launcher", 0755)
# Chmod down renpy.py, for now.
os.chmod("renpy.py", 0644)
# Compile the various games
for i in [ 'tutorial/game', 'launcher', 'template/game', 'the_question/game' ]:
os.system("./renpy.sh --compile --game " + i)
files = [ ]
more_files = [ ]
files.append("CHANGELOG.txt")
files.append("LICENSE.txt")
files.extend(tree("common"))
more_files.append("console.exe")
files.extend(tree("launcher"))
files.extend(tree("tutorial"))
# files.extend(tree("dse"))
files.extend(tree("the_question"))
# editor = tree("editor")
# editor.remove("editor/scite.exe")
# files.append("editor/scite.exe")
# more_files.extend(editor)
more_files.extend(tree("jedit"))
# files.extend(tree("extras"))
more_files.extend(tree("lib"))
more_files.extend(tree("lib/linux-x86"))
module_files = [
"lib/pysdlsound/linmixer.py",
"lib/pysdlsound/__init__.py",
"core.c",
"ffdecode.c",
"IMG_savepng.c",
"IMG_savepng.h",
"mmx.h",
"pss.c",
"pss.h",
"*.c",
"*.h",
"*.py",
"*.pyx",
"README.txt",
"_renpy.c",
"renpy_font.c",
"renpy.h",
"_renpy.pyx",
"renpy_ttf.c",
"renpy_ttf.h",
"rwobject.c",
"setup.py",
"sound.c",
"sound.pyx",
"subpixel.c",
"winmixer.c",
"winmixer.pyx",
"_renpybidi.c",
"renpybidicore.c",
"_renpybidi.pyx",
"_renpy_pysdlgl.c",
"_renpy_pysdlgl.pyx",
"_renpy_tegl.c",
"maketegl.py",
"maketegl.txt",
"lib/pysdlsound/*.py",
]
for i in module_files:
files.append('module/' + i)
files.extend(glob.glob('module/' + i))
files.extend(tree('renpy'))
files.append('renpy.py')
more_files.append('python26.dll')
more_files.append('msvcr90.dll')
more_files.append('Microsoft.VC90.CRT.manifest')
files.extend(tree('renpy'))
more_files.extend(tree('renpy.app'))
more_files.append('renpy.code')
more_files.append('renpy.exe')
files.append('renpy.py')
more_files.append('renpy.exe')
more_files.append("console.exe")
more_files.append('renpy.sh')
files.extend(tree('template'))
# files.extend(tree('tools'))
files.extend(tree('doc'))
# files.append('doc/index.html')
# files.append('doc/common.css')
# files.append('doc/docs.css')
# files.append('doc/monobook.css')
# files.append('doc/monobook2.css')
# files.append('doc/shared.css')
# files.extend(tree('doc/reference'))
# files.extend(tree('doc/tutorials'))
# files.extend(tree('doc/images'))
files.sort()
more_files.sort()
@@ -222,6 +198,7 @@ def main():
print "----"
tarup("dists/" + prefix + "-source.tar.bz2", prefix, files)
print "----"
# Make the 7zip.
os.chdir("dists")
os.system("unzip " + prefix + "-sdk.zip")
@@ -233,13 +210,23 @@ def main():
os.system("7z a " + prefix + "-sdk.7z " + prefix)
os.system("cat ../7z.sfx " + prefix + "-sdk.7z > " + prefix + "-sdk.7z.exe""")
shutil.rmtree(prefix)
os.unlink(prefix + "-sdk.7z")
os.chdir("..")
if os.path.exists("updates/prerelease"):
shutil.rmtree("updates/prerelease")
os.rename("dists/" + prefix, "updates/prerelease")
os.unlink("updates/prerelease/lib/update-version.txt")
makeupdate.make_update("updates/prerelease", revno)
os.chmod("renpy.py", 0755)
print
print "Did you remember to rebuild the exe after the last change?"
print "Did you run me with renpython -OO?"
print "Was ming using the right crt?"
print "Did you update renpy.py and launcher/script_version.rpy?"
print "Did you run with a RENPY_SCALE_FACTOR?"
+15 -17
View File
@@ -108,7 +108,7 @@ init python:
return rv
def switch_theme(name):
def switch_theme(theme_function, name):
"""
Switches the theme of the current project to the named theme.
"""
@@ -130,7 +130,7 @@ init python:
m = re.match(r' theme.(\w+)\(', l)
if m:
if m.group(1) in theme_functions:
l = theme_templates[td["theme"]] % td
l = theme_templates[theme_function] % td
changed = True
out.write(l + "\n")
@@ -160,29 +160,26 @@ init python:
##########################################################################
# Code that handles display.
current_theme_function = None
current_theme = None
def show_theme(name, target):
def show_theme(function, name, target):
"""
Changes from the current theme to the roundrect theme named
`name`.
Changes from the current theme to the theme named `name`.
"""
if current_theme == name:
if current_theme_function == function and current_theme == name:
return
store.current_theme_function = function
store.current_theme = name
td = theme_data[name].copy()
kind = td["theme"]
del td["theme"]
if kind == "roundrect":
td["rounded_window"] = False
td["rounded_window"] = False
renpy.style.restore(style_backup)
getattr(theme, kind)(**td)
getattr(theme, function)(**td)
customize_styles()
renpy.style.rebuild()
@@ -264,7 +261,7 @@ label repeat_choose_theme:
button(name,
ui.returns(function),
"",
hovered=curried_show_theme(exemplar, "repeat_choose_theme"),
hovered=curried_show_theme(function, exemplar, "repeat_choose_theme"),
unhovered=does_nothing)
ui.close() # vbox
@@ -292,7 +289,8 @@ label repeat_choose_color_scheme:
tip = _(u"Please choose a color scheme for your project.")
themes = [ k for k,v in theme_data.iteritems() if v["theme"] == theme_function ]
themes = theme_data.keys()
themes.sort()
screen()
@@ -307,9 +305,9 @@ label repeat_choose_color_scheme:
for i in themes:
button(i,
curried_switch_theme(i),
curried_switch_theme(theme_function, i),
"",
hovered=curried_show_theme(i, "repeat_choose_color_scheme"),
hovered=curried_show_theme(theme_function, i, "repeat_choose_color_scheme"),
unhovered=does_nothing)
ui.close() # vbox
+5 -2
View File
@@ -41,6 +41,7 @@ ignored_files = (
"thumbs.db",
"traceback.txt",
"errors.txt",
"files.txt",
"saves"
)
@@ -146,7 +147,7 @@ class MyZipFile(zipfile.ZipFile):
def tree(
src,
dest,
exclude_suffix=[ ".pyc", "~", ".bak" ],
exclude_suffix=[ ".pyc", "~", ".bak", ".old", ".new" ],
exclude_prefix=[ "#", "." ],
exclude_files = set(ignored_files),
root_exclude_prefix = [ ],
@@ -392,11 +393,13 @@ def distribute(
if build_windows or build_all:
win_files.append((rb + "renpy.exe", "/" + executable_name + ".exe"))
win_files.append((rb + "renpy.code", "/renpy.code"))
win_files.append((rb + "python26.dll", "/python26.dll"))
win_files.append((rb + "msvcr90.dll", "/msvcr90.dll"))
win_files.append((rb + "Microsoft.VC90.CRT.manifest", "/Microsoft.VC90.CRT.manifest"))
win_files.append((rb + "lib", "/lib"))
win_files.extend(tree(rb + "lib/windows-x86", "/lib/windows-x86"))
if os.path.exists(project_path + "/icon.ico"):
file_data[rb + "renpy.exe"] = change_icon.change_icons(
rb + "renpy.exe",
+21
View File
@@ -221,6 +221,27 @@ init 11 python:
interact()
def pauseinfo(t, message):
"""
Displays an error to the user, and lets him click to return to
`target`.
"""
set_tooltip("")
screen()
ui.vbox()
title(t)
text(message)
ui.null(height=20)
button(_(u"Ok"), ui.returns(True), None)
ui.close()
interact()
def info(t, message):
"""
Displays an informational message to the user, and immediately

Some files were not shown because too many files have changed in this diff Show More