390 lines
14 KiB
Text
390 lines
14 KiB
Text
# Copyright 2004-2019 Tom Rothamel <pytom@bishoujo.us>
|
|
#
|
|
# Permission is hereby granted, free of charge, to any person
|
|
# obtaining a copy of this software and associated documentation files
|
|
# (the "Software"), to deal in the Software without restriction,
|
|
# including without limitation the rights to use, copy, modify, merge,
|
|
# publish, distribute, sublicense, and/or sell copies of the Software,
|
|
# and to permit persons to whom the Software is furnished to do so,
|
|
# subject to the following conditions:
|
|
#
|
|
# The above copyright notice and this permission notice shall be
|
|
# included in all copies or substantial portions of the Software.
|
|
#
|
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
# This file contains a number of definitions of standard
|
|
# locations and transitions. We've moved them into the common
|
|
# directory so that it's easy for an updated version of all of these
|
|
# definitions.
|
|
|
|
init -1400:
|
|
|
|
transform reset:
|
|
alpha 1 rotate None zoom 1 xzoom 1 yzoom 1 align (0, 0) alignaround (0, 0) subpixel False size None crop None
|
|
|
|
# These are positions that can be used inside at clauses. We set
|
|
# them up here so that they can be used throughout the program.
|
|
transform left:
|
|
xpos 0.0 xanchor 0.0 ypos 1.0 yanchor 1.0
|
|
|
|
transform right:
|
|
xpos 1.0 xanchor 1.0 ypos 1.0 yanchor 1.0
|
|
|
|
transform center:
|
|
xpos 0.5 xanchor 0.5 ypos 1.0 yanchor 1.0
|
|
|
|
transform truecenter:
|
|
xpos 0.5 xanchor 0.5 ypos 0.5 yanchor 0.5
|
|
|
|
transform topleft:
|
|
xpos 0.0 xanchor 0.0 ypos 0.0 yanchor 0.0
|
|
|
|
transform topright:
|
|
xpos 1.0 xanchor 1.0 ypos 0.0 yanchor 0.0
|
|
|
|
transform top:
|
|
xpos 0.5 xanchor 0.5 ypos 0.0 yanchor 0.0
|
|
|
|
# Offscreen positions for use with the move transition. Images at
|
|
# these positions are still shown (and consume
|
|
# resources)... remember to hide the image after the transition.
|
|
transform offscreenleft:
|
|
xpos 0.0 xanchor 1.0 ypos 1.0 yanchor 1.0
|
|
|
|
transform offscreenright:
|
|
xpos 1.0 xanchor 0.0 ypos 1.0 yanchor 1.0
|
|
|
|
transform default:
|
|
alpha 1 rotate None zoom 1 xzoom 1 yzoom 1 align (0, 0) alignaround (0, 0) subpixel False size None crop None
|
|
xpos 0.5 xanchor 0.5 ypos 1.0 yanchor 1.0
|
|
|
|
# These are used by the transitions to move things offscreen. We don't
|
|
# expect them to be used by user code.
|
|
transform _moveleft:
|
|
xpos 0.0 xanchor 1.0
|
|
|
|
transform _moveright:
|
|
xpos 1.0 xanchor 0.0
|
|
|
|
transform _movetop:
|
|
ypos 0.0 yanchor 1.0
|
|
|
|
transform _movebottom:
|
|
ypos 1.0 yanchor 0.0
|
|
|
|
python:
|
|
config.default_transform = default
|
|
|
|
# These names are unlikely to be used in screens - except as arguments -
|
|
# so mark them not-const.
|
|
|
|
renpy.not_const("reset")
|
|
renpy.not_const("left")
|
|
renpy.not_const("right")
|
|
renpy.not_const("center")
|
|
renpy.not_const("truecenter")
|
|
renpy.not_const("topleft")
|
|
renpy.not_const("topright")
|
|
renpy.not_const("top")
|
|
renpy.not_const("offscreenleft")
|
|
renpy.not_const("offscreenright")
|
|
renpy.not_const("default")
|
|
|
|
# Transitions ##################################################################
|
|
|
|
init -1400 python:
|
|
|
|
_define = define = object()
|
|
|
|
# Ease images around. These are basically cosine-warped moves.
|
|
def _ease_out_time_warp(x):
|
|
import math
|
|
return 1.0 - math.cos(x * math.pi / 2.0)
|
|
|
|
def _ease_in_time_warp(x):
|
|
import math
|
|
return math.cos((1.0 - x) * math.pi / 2.0)
|
|
|
|
def _ease_time_warp(x):
|
|
import math
|
|
return .5 - math.cos(math.pi * x) / 2.0
|
|
|
|
# Back up the move transition, so that if MoveTransition gets replaced by
|
|
# renpy.compat, this still works.
|
|
__MoveTransition = MoveTransition
|
|
|
|
# This defines a family of move transitions, using the old-style methods.
|
|
def move_transitions(prefix, delay, time_warp=None, in_time_warp=None, out_time_warp=None, old=False, layers=[ 'master' ], **kwargs):
|
|
"""
|
|
:doc: transition_family
|
|
|
|
This defines a family of move transitions, similar to the move and ease
|
|
transitions. For a given `prefix`, this defines the transitions:
|
|
|
|
* *prefix*- A transition that takes `delay` seconds to move images that
|
|
changed positions to their new locations.
|
|
|
|
* *prefix*\ inleft, *prefix*\ inright, *prefix*\ intop, *prefix*\ inbottom - Transitions
|
|
that take `delay` seconds to move images that changed positions to their
|
|
new locations, with newly shown images coming in from the appropriate
|
|
side.
|
|
|
|
* *prefix*\ outleft, *prefix*\ outright, *prefix*\ outtop, *prefix*\ outbottom -
|
|
Transitions that take `delay` seconds to move images that changed
|
|
positions to their new locations, with newly hidden images leaving via
|
|
the appropriate side.
|
|
|
|
`time_warp`, `in_time_warp`, `out_time_warp`
|
|
Time warp functions that are given a time from 0.0 to 1.0 representing
|
|
the fraction of the move that is complete, and return a value in the same
|
|
range giving the fraction of a linear move that is complete.
|
|
|
|
This can be used to define functions that ease the images around,
|
|
rather than moving them at a constant speed.
|
|
|
|
The three arguments are used for images remaining on the screen,
|
|
newly shown images, and newly hidden images, respectively.
|
|
|
|
`old`
|
|
If true, the transitions to move the old displayables, rather than the new ones.
|
|
|
|
`layers`
|
|
The layers the transition will apply to.
|
|
|
|
::
|
|
|
|
# This defines all of the pre-defined transitions beginning
|
|
# with "move".
|
|
init python:
|
|
define.move_transitions("move", 0.5)
|
|
|
|
"""
|
|
|
|
moves = {
|
|
"" : MoveTransition(
|
|
delay,
|
|
old=old,
|
|
layers=layers,
|
|
time_warp=time_warp),
|
|
|
|
"inright" : MoveTransition(
|
|
delay,
|
|
old=old,
|
|
layers=layers,
|
|
enter=_moveright,
|
|
time_warp=time_warp,
|
|
enter_time_warp=in_time_warp,
|
|
),
|
|
|
|
"inleft" : MoveTransition(
|
|
delay,
|
|
old=old,
|
|
layers=layers,
|
|
enter=_moveleft,
|
|
time_warp=time_warp,
|
|
enter_time_warp=in_time_warp,
|
|
),
|
|
|
|
"intop" : MoveTransition(
|
|
delay,
|
|
old=old,
|
|
layers=layers,
|
|
enter=_movetop,
|
|
time_warp=time_warp,
|
|
enter_time_warp=in_time_warp,
|
|
),
|
|
|
|
"inbottom" : MoveTransition(
|
|
delay,
|
|
old=old,
|
|
layers=layers,
|
|
enter=_movebottom,
|
|
time_warp=time_warp,
|
|
enter_time_warp=in_time_warp,
|
|
),
|
|
|
|
"outright" : MoveTransition(
|
|
delay,
|
|
old=old,
|
|
layers=layers,
|
|
leave=_moveright,
|
|
time_warp=time_warp,
|
|
leave_time_warp=out_time_warp,
|
|
),
|
|
|
|
"outleft" : MoveTransition(
|
|
delay,
|
|
old=old,
|
|
layers=layers,
|
|
leave=_moveleft,
|
|
time_warp=time_warp,
|
|
leave_time_warp=out_time_warp,
|
|
),
|
|
|
|
"outtop" : MoveTransition(
|
|
delay,
|
|
old=old,
|
|
layers=layers,
|
|
leave=_movetop,
|
|
time_warp=time_warp,
|
|
leave_time_warp=out_time_warp,
|
|
),
|
|
|
|
"outbottom" : MoveTransition(
|
|
delay,
|
|
old=old,
|
|
layers=layers,
|
|
leave=_movebottom,
|
|
time_warp=time_warp,
|
|
leave_time_warp=out_time_warp,
|
|
),
|
|
}
|
|
|
|
for k, v in moves.iteritems():
|
|
setattr(store, prefix + k, v)
|
|
|
|
def old_move_transitions(prefix, delay, time_warp=None, in_time_warp=None, out_time_warp=None, old=False, layers=[ 'master' ], **kwargs):
|
|
moves = {
|
|
"" : MoveTransition(
|
|
delay,
|
|
old=old,
|
|
layers=layers,
|
|
factory=MoveFactory(time_warp=time_warp, **kwargs)),
|
|
|
|
"inright" : MoveTransition(
|
|
delay,
|
|
old=old,
|
|
layers=layers,
|
|
factory=MoveFactory(time_warp=time_warp, **kwargs),
|
|
enter_factory=MoveIn((1.0, None, 0.0, None), time_warp=in_time_warp, **kwargs)),
|
|
|
|
"inleft" : MoveTransition(
|
|
delay,
|
|
old=old,
|
|
layers=layers,
|
|
factory=MoveFactory(time_warp=time_warp, **kwargs),
|
|
enter_factory=MoveIn((0.0, None, 1.0, None), time_warp=in_time_warp, **kwargs)),
|
|
|
|
"intop" : MoveTransition(
|
|
delay,
|
|
old=old,
|
|
layers=layers,
|
|
factory=MoveFactory(time_warp=time_warp, **kwargs),
|
|
enter_factory=MoveIn((None, 0.0, None, 1.0), time_warp=in_time_warp, **kwargs)),
|
|
|
|
"inbottom" : MoveTransition(
|
|
delay,
|
|
old=old,
|
|
layers=layers,
|
|
factory=MoveFactory(time_warp=time_warp, **kwargs),
|
|
enter_factory=MoveIn((None, 1.0, None, 0.0), time_warp=in_time_warp, **kwargs)),
|
|
|
|
"outright" : MoveTransition(
|
|
delay,
|
|
old=old,
|
|
layers=layers,
|
|
factory=MoveFactory(time_warp=time_warp, **kwargs),
|
|
leave_factory=MoveOut((1.0, None, 0.0, None), time_warp=out_time_warp, **kwargs)),
|
|
|
|
"outleft" : MoveTransition(
|
|
delay,
|
|
old=old,
|
|
layers=layers,
|
|
factory=MoveFactory(time_warp=time_warp, **kwargs),
|
|
leave_factory=MoveOut((0.0, None, 1.0, None), time_warp=out_time_warp, **kwargs)),
|
|
|
|
"outtop" : MoveTransition(
|
|
delay,
|
|
old=old,
|
|
layers=layers,
|
|
factory=MoveFactory(time_warp=time_warp, **kwargs),
|
|
leave_factory=MoveOut((None, 0.0, None, 1.0), time_warp=out_time_warp, **kwargs)),
|
|
|
|
"outbottom" : MoveTransition(
|
|
delay,
|
|
old=old,
|
|
layers=layers,
|
|
factory=MoveFactory(time_warp=time_warp, **kwargs),
|
|
leave_factory=MoveOut((None, 1.0, None, 0.0), time_warp=time_warp, **kwargs)),
|
|
}
|
|
|
|
for k, v in moves.iteritems():
|
|
setattr(store, prefix + k, v)
|
|
|
|
define.move_transitions = move_transitions
|
|
define.old_move_transitions = old_move_transitions
|
|
del move_transitions
|
|
del old_move_transitions
|
|
|
|
define.move_transitions("move", 0.5)
|
|
define.move_transitions("ease", 0.5, _ease_time_warp, _ease_in_time_warp, _ease_out_time_warp)
|
|
|
|
init -1400:
|
|
image black = Solid("#000")
|
|
|
|
# Simple transitions.
|
|
define fade = Fade(.5, 0, .5) # Fade to black and back.
|
|
define dissolve = Dissolve(0.5)
|
|
define pixellate = Pixellate(1.0, 5)
|
|
|
|
# Various uses of CropMove.
|
|
define wiperight = CropMove(1.0, "wiperight")
|
|
define wipeleft = CropMove(1.0, "wipeleft")
|
|
define wipeup = CropMove(1.0, "wipeup")
|
|
define wipedown = CropMove(1.0, "wipedown")
|
|
|
|
define slideright = CropMove(1.0, "slideright")
|
|
define slideleft = CropMove(1.0, "slideleft")
|
|
define slideup = CropMove(1.0, "slideup")
|
|
define slidedown = CropMove(1.0, "slidedown")
|
|
|
|
define slideawayright = CropMove(1.0, "slideawayright")
|
|
define slideawayleft = CropMove(1.0, "slideawayleft")
|
|
define slideawayup = CropMove(1.0, "slideawayup")
|
|
define slideawaydown = CropMove(1.0, "slideawaydown")
|
|
|
|
define irisout = CropMove(1.0, "irisout")
|
|
define irisin = CropMove(1.0, "irisin")
|
|
|
|
# Various uses of PushMove.
|
|
define pushright = PushMove(1.0, "pushright")
|
|
define pushleft = PushMove(1.0, "pushleft")
|
|
define pushup = PushMove(1.0, "pushup")
|
|
define pushdown = PushMove(1.0, "pushdown")
|
|
|
|
# Zoom-based transitions. Legacy - nowadays, these are probably best done with ATL.
|
|
define zoomin = OldMoveTransition(0.5, enter_factory=ZoomInOut(0.01, 1.0))
|
|
define zoomout = OldMoveTransition(0.5, leave_factory=ZoomInOut(1.0, 0.01))
|
|
define zoominout = OldMoveTransition(0.5, enter_factory=ZoomInOut(0.01, 1.0), leave_factory=ZoomInOut(1.0, 0.01))
|
|
|
|
# These shake the screen up and down for a quarter second.
|
|
# The delay needs to be an integer multiple of the period.
|
|
define vpunch = Move((0, 10), (0, -10), .10, bounce=True, repeat=True, delay=.275)
|
|
define hpunch = Move((15, 0), (-15, 0), .10, bounce=True, repeat=True, delay=.275)
|
|
|
|
# These use the ImageDissolve to do some nifty effects.
|
|
define blinds = ImageDissolve(im.Tile("blindstile.png"), 1.0, 8)
|
|
define squares = ImageDissolve(im.Tile("squarestile.png"), 1.0, 256)
|
|
|
|
# The default narrator.
|
|
define _narrator = Character(None, kind=adv, what_style='say_thought')
|
|
define centered = Character(None, what_style="centered_text", window_style="centered_window")
|
|
define vcentered = Character(None, what_style="centered_vtext", window_style="centered_window")
|
|
|
|
init 1400 python:
|
|
if not hasattr(store, 'narrator'):
|
|
narrator = _narrator
|
|
|
|
renpy.pure('narrator')
|
|
renpy.pure('name_only')
|
|
|
|
# This is necessary to ensure that config.default_transform works.
|
|
if config.default_transform:
|
|
config.default_transform._show()
|