├── 00warper.rpy
├── ATL_functions.rpy
├── ActionEditor.rpy
├── ActionEditor_config.rpy
├── ActionEditor_screens.rpy
├── README.md
├── image_viewer.rpy
├── keymap.rpy
├── menu_screen.rpy
├── sound_viewer.rpy
└── tl
├── chinese
├── ActionEditor.rpy
├── ActionEditor_screens.rpy
├── image_viewer.rpy
└── sound_viewer.rpy
└── japanese
├── ActionEditor.rpy
├── ActionEditor_screens.rpy
├── image_viewer.rpy
└── sound_viewer.rpy
/00warper.rpy:
--------------------------------------------------------------------------------
1 | python early hide:
2 |
3 | @renpy.atl_warper
4 | def power_in2(x):
5 | if x >= 1.0:
6 | return 1.0
7 | return 1.0 - (1.0 - x)**2
8 |
9 | @renpy.atl_warper
10 | def power_out2(x):
11 | if x >= 1.0:
12 | return 1.0
13 | return x**2
14 |
15 | @renpy.atl_warper
16 | def power_in3(x):
17 | if x >= 1.0:
18 | return 1.0
19 | return 1.0 - (1.0 - x)**3
20 |
21 | @renpy.atl_warper
22 | def power_out3(x):
23 | if x >= 1.0:
24 | return 1.0
25 | return x**3
26 |
27 | @renpy.atl_warper
28 | def power_in4(x):
29 | if x >= 1.0:
30 | return 1.0
31 | return 1.0 - (1.0 - x)**4
32 |
33 | @renpy.atl_warper
34 | def power_out4(x):
35 | if x >= 1.0:
36 | return 1.0
37 | return x**4
38 |
39 | @renpy.atl_warper
40 | def power_in5(x):
41 | if x >= 1.0:
42 | return 1.0
43 | return 1.0 - (1.0 - x)**5
44 |
45 | @renpy.atl_warper
46 | def power_out5(x):
47 | if x >= 1.0:
48 | return 1.0
49 | return x**5
50 |
51 | @renpy.atl_warper
52 | def power_in6(x):
53 | if x >= 1.0:
54 | return 1.0
55 | return 1.0 - (1.0 - x)**6
56 |
57 | @renpy.atl_warper
58 | def power_out6(x):
59 | if x >= 1.0:
60 | return 1.0
61 | return x**6
62 |
63 | @renpy.atl_warper
64 | def spring1(x):
65 | from math import exp, cos
66 | rho = 5 # 減衰率
67 | mu = 30# 角振動数
68 | return (1.0 - exp(-rho * x) * cos(mu * x)) / (1.0 - exp(-rho) * cos(mu))
69 |
70 | @renpy.atl_warper
71 | def spring2(x):
72 | from math import exp, cos
73 | rho = 5 # 減衰率
74 | mu = 20# 角振動数
75 | return (1.0 - exp(-rho * x) * cos(mu * x)) / (1.0 - exp(-rho) * cos(mu))
76 |
77 | @renpy.atl_warper
78 | def spring3(x):
79 | from math import exp, cos
80 | rho = 5 # 減衰率
81 | mu = 10# 角振動数
82 | return (1.0 - exp(-rho * x) * cos(mu * x)) / (1.0 - exp(-rho) * cos(mu))
83 |
84 | @renpy.atl_warper
85 | def bop_time_warp(x):
86 | return -23.0 * x**5 + 57.5 * x**4 - 55 * x**3 + 25 * x**2 - 3.5 * x
87 |
88 | @renpy.atl_warper
89 | def bop_in_time_warp(x):
90 | return -2.15 * x**2 + 3.15 * x
91 |
92 | @renpy.atl_warper
93 | def bop_out_time_warp(x):
94 | return 2.15 * x**2 - 1.15 * x
95 |
96 | @renpy.atl_warper
97 | def bop_to_time_warp(x):
98 | return -5 * x**5 + 5 * x**4 + x**2
99 |
100 | @renpy.atl_warper
101 | def to_bop_time_warp(x):
102 | return -5 * x**5 + 20 * x**4 - 30 * x**3 + 19 * x**2 - 3 * x
103 |
104 | @renpy.atl_warper
105 | def easeout2(x):
106 | if x >= 1.0:
107 | return 1.0
108 | import math
109 | return 1.0 - math.cos(x * math.pi / 2.0)
110 |
111 | @renpy.atl_warper
112 | def easein2(x):
113 | if x >= 1.0:
114 | return 1.0
115 | import math
116 | return math.cos((1.0 - x) * math.pi / 2.0)
117 |
118 | @renpy.atl_warper
119 | def ease2(x):
120 | if x >= 1.0:
121 | return 1.0
122 | import math
123 | return .5 - math.cos(math.pi * x) / 2.0
124 | @renpy.atl_warper
125 | def power_in_time_warp_real(x):
126 | if x >= 1.0:
127 | return 1.0
128 | return 1.0 - (1.0 - x)**6
129 |
130 | #互換性のために残しておく
131 | @renpy.atl_warper
132 | def power_out_time_warp_real(x):
133 | if x >= 1.0:
134 | return 1.0
135 | return 1.0 - (1.0 - x)**6
136 |
137 | @renpy.atl_warper
138 | def power_in_time_warp_real5(x):
139 | if x >= 1.0:
140 | return 1.0
141 | return 1.0 - (1.0 - x)**5
142 |
143 | @renpy.atl_warper
144 | def power_out_time_warp_real5(x):
145 | if x >= 1.0:
146 | return 1.0
147 | return x**5
148 |
149 | @renpy.atl_warper
150 | def loop_cos(x):
151 | from math import cos, pi
152 | if x >= 1.0:
153 | return 1.0
154 | return (-1*cos(x*2*pi)+1)/2
155 |
--------------------------------------------------------------------------------
/ATL_functions.rpy:
--------------------------------------------------------------------------------
1 | # ATL functions
2 | # This File adds some utility function for ATL function.
3 | # このファイルはATLのfunctionステートメントで使用できるユーソリティー関数を追加します。
4 | #
5 | #class mfn(func1, func2, func3, ...)
6 | # This class takes functions which are called with arguments tran, st, at.
7 | # This is intended to be used to use multiple functions for function statement in ATL.
8 | # このクラスは複数の関数を引数に取り、それらは tran, st, atを引数に呼び出されます。
9 | # これはATLのfunctionステートメントで複数の関数を使用するために使用できます。
10 | # example:
11 | # init python:
12 | # example_func = mfn(func1, func2)
13 | # label start:
14 | # show test:
15 | # function example_func(func1, func2)
16 | #
17 | #class atl_sin(property, peak, hz, start=None, end=None, damped=False, damped_warper='ease')
18 | # This change the property value with a sine wave.
19 | # プロパティーの値を正弦波で変更します。
20 | # property: property name string
21 | # プロパティーの名前の文字列です。
22 | # peak: peak value
23 | # 振幅
24 | # hz: hz of the wave
25 | # 振動数
26 | # start: This function starts after `start` seconds
27 | # この関数は `start` 秒後に開始します。
28 | # end: This function ends after `end` seconds
29 | # この関数は `end` 秒後に終了します。
30 | # damped: If True and `end` is not None, this wave
31 | # is damped wave. Wave stops in `end` seconds
32 | # True かつ `end` が設定されていれば減衰波になり、
33 | # `end` 秒後に振動が止まります。
34 | # damped_warper: This is warper which is used for damp.
35 | # 減衰に使用されるワーパーです。
36 | #
37 | #class atl_cos(property, peak, hz, start=None, end=None, damped=False, damped_warper='ease')
38 | # This is cos version of atl_sin.
39 | # atl_sinの余弦波バージョンです。
40 |
41 | #class atl_wiggle(property, max, deviation, cycle, fast_forward=1, knot_num_per_sec=1, start=None, end=None, damped=False, damped_warper='ease'):
42 | # Random knots are created according to a Gaussian distribution, and sprite interpolation is performed between knots to reproduce random vibration.
43 | # ガウス分布に従ったランダムな中間点を作成し、中間点間をスプライト補間してランダム振動を再現します。
44 | # property: property name string
45 | # プロパティーの名前の文字列です。
46 | # max: The valu is limited in this value.
47 | # 設定される値はこの値を越えません。
48 | # deviation: the standard deviation
49 | # 標準偏差です。
50 | # cycle: The number of seconds of the vibration cycle. The value set for each of these seconds is 0.
51 | # It is important for this vibration looks random to set sufficiently big value
52 | # 振動周期の秒数です。この秒数ごとに設定される値は0となります。振動をランダムに見せるには十分長い必要があります。
53 | # fast_forward: The vibration will be `fast_forward` times faster.
54 | # 振動が `fast_forward` 倍早まわしになります。
55 | # knot_num_per_sec: The number of knot per second. The more knot, the finer the amplitude.
56 | # 1秒あたりの中間点の数です。中間点が増えるほど振幅が細かくなります。
57 | # start: This function starts after `start` seconds
58 | # この関数は `start` 秒後に開始します。
59 | # end: This function ends after `end` seconds
60 | # この関数は `end` 秒後に終了します。
61 | # damped: If True and `end` is not None, this wave
62 | # is damped wave. Wave stops in `end` seconds
63 | # True かつ `end` が設定されていれば減衰波になり、
64 | # `end` 秒後に振動が止まります。
65 | # damped_warper: This is warper which is used for damp.
66 | # 減衰に使用されるワーパーです。
67 | #
68 | # For example, This reproduces camera shake.
69 | # 例: 手ぶれを再現します。
70 | # init python:
71 | # camera_shake = mfn(atl_wiggle("yoffset", max=20, deviation=40, cycle=10), atl_wiggle("xoffset", max=20, deviation=40, cycle=10))
72 | # label start:
73 | # camera:
74 | # function camera_shake
75 | #
76 | # For example, This reproduces the 10 seconds earthquake
77 | # 例: 10秒間の地震を再現します。
78 | # init python:
79 | # earthquake = mfn(atl_wiggle("yoffset", max=20, deviation=40, cycle=100, fast_forward=10, end=10, damped=True, damped_warper="ease"), atl_wiggle("xoffset", max=20, deviation=40, cycle=100, fast_forward=10, end=10, damped=True, damped_warper="ease"))
80 | # label start:
81 | # camera:
82 | # function earthquake
83 | #
84 | #
85 | #def atl_swiggle(deviation, fast_forward=1, start=None, end=None, damped=False, damped_warper='ease', property=("xoffset", "yoffset")):
86 | # This is the wrapper for atl_wiggle.
87 | # これはatl_wiggleのラッパーです。
88 | # Below two code is mostly equivalent.
89 | # 次の2つのコードはほぼ同じ動作をします。
90 | #
91 | # init python:
92 | # sample1 = mfn(atl_wiggle("yoffset", max=20, deviation=40, cycle=10), atl_wiggle("xoffset", max=20, deviation=40, cycle=10))
93 | # sample2 = atl_swiggle(deviation=40)
94 |
95 | init python in _viewers:
96 | in_editor = False
97 |
98 | init python:
99 | class mfn(object):
100 | def __init__(self, *args):
101 | self.fns = list(args)
102 |
103 | def __call__(self, tran, st, at):
104 | min_fr = None
105 | for i in reversed(range(len(self.fns))):
106 | fr = self.fns[i](tran, st, at)
107 | if fr is not None and (min_fr is None or fr < min_fr):
108 | min_fr = fr
109 | elif fr is None and not _viewers.in_editor:
110 | del self.fns[i]
111 | return min_fr
112 |
113 |
114 | class generate_atl_func(object):
115 | def __init__(self, property, start=None, end=None, check_type=True):
116 | self.property = property
117 | self.start = start
118 | self.end = end
119 | self.check_type = check_type
120 |
121 | def __call__(self, tran, st, at):
122 | if self.end is not None:
123 | if st > self.end:
124 | return None
125 | if self.start is not None:
126 | st -= self.start
127 | if st < 0:
128 | return 0
129 | cur_prop = self.get_cur_prop(tran)
130 | fr = self.function(tran, st, at)
131 | if self.check_type and isinstance(cur_prop, int):
132 | setattr(tran, self.property, int(getattr(tran, self.property)))
133 | return fr
134 |
135 | def get_cur_prop(self, tran):
136 | cur_prop = getattr(tran, self.property)
137 | if cur_prop is None:
138 | cur_prop = getattr(tran, "inherited_"+self.property)
139 | return cur_prop
140 |
141 |
142 | class atl_sin(generate_atl_func):
143 | def __init__(self, property, peak, hz, start=None, end=None, damped=False, damped_warper='ease'):
144 | super(atl_sin, self).__init__(property, start, end)
145 | self.peak = peak
146 | self.hz = hz
147 | self.damped = damped
148 | self.damped_warper = damped_warper
149 |
150 | def function(self, tran, st, at):
151 | from math import sin, pi
152 | damp = 1
153 | if self.damped and self.end is not None:
154 | damp = renpy.atl.warpers[self.damped_warper]((self.end - st) / self.end)
155 | offset = damp * self.peak * sin(st*2*pi*self.hz)
156 | setattr(tran, self.property, offset)
157 | return 0
158 |
159 |
160 | class atl_cos(generate_atl_func):
161 | def __init__(self, property, peak, hz, start=None, end=None, damped=False, damped_warper='ease'):
162 | super(atl_cos, self).__init__(property, start, end)
163 | self.peak = peak
164 | self.hz = hz
165 | self.damped = damped
166 | self.damped_warper = damped_warper
167 |
168 | def function(self, tran, st, at):
169 | from math import cos, pi
170 | damp = 1
171 | if self.damped and self.end is not None:
172 | damp = renpy.atl.warpers[self.damped_warper]((self.end - st) / self.end)
173 | offset = damp * self.peak * cos(st*2*pi*self.hz)
174 | setattr(tran, self.property, offset)
175 | return 0
176 |
177 |
178 | class atl_wiggle(generate_atl_func):
179 | def __init__(self, property, max, deviation, cycle, fast_forward=1, knot_num_per_sec=1, start=None, end=None, damped=False, damped_warper='ease'):
180 | super(atl_wiggle, self).__init__(property, start, end)
181 | from random import gauss
182 |
183 | start_point = 0
184 | goal_point = 0
185 | #予めランダムな値を生成しておく
186 | self.random_knot = [start_point]
187 | for i in range(0, int(cycle/knot_num_per_sec)):
188 | while True:
189 | v = gauss(0, deviation)
190 | if abs(v) <= max:
191 | break
192 | self.random_knot.append(v)
193 | self.random_knot.append(goal_point)
194 | self.cycle = cycle
195 | self.fast_forward = fast_forward
196 | self.damped = damped
197 | self.damped_warper = damped_warper
198 |
199 | def function(self, tran, st, at):
200 | st *= self.fast_forward
201 | g = round((st % self.cycle), 3) / self.cycle
202 | damp = 1
203 | if self.damped and self.end is not None:
204 | damp = renpy.atl.warpers[self.damped_warper]((self.end - st / self.fast_forward) / self.end)
205 |
206 | if renpy.version_tuple[3] >= 24011600:
207 | interpolate_spline = renpy.atl.interpolate_spline(g, self.random_knot, renpy.atl.PROPERTIES[self.property])
208 | else:
209 | interpolate_spline = renpy.atl.interpolate_spline(g, self.random_knot)
210 |
211 | offset = damp * interpolate_spline
212 | setattr(tran, self.property, offset)
213 | return 0
214 |
215 |
216 | def atl_swiggle(deviation, fast_forward=1, start=None, end=None, damped=False, damped_warper='ease', property=("xoffset", "yoffset")):
217 | cycle = 20
218 | if not isinstance(property, tuple):
219 | property = tuple([property])
220 | args = []
221 | for p in property:
222 | args.append(atl_wiggle(p, max=deviation/2, deviation=deviation, cycle=cycle*fast_forward, fast_forward=fast_forward, start=start, end=end, damped=damped, damped_warper=damped_warper))
223 | return mfn(*args)
224 |
225 |
226 | # class atl_wiggle(generate_atl_func):
227 | # def __init__(self, property, peak, hz, start=None, end=None):
228 | # super(atl_wiggle, self).__init__(property, start, end)
229 | # from random import random
230 | # #予めランダムな値を生成しておく
231 | # self.randoms = [(1+random(), 1+random()) for i in range(0, 100)]
232 | # self.hz = hz
233 | # self.peak = peak
234 | #
235 | # self.octaves = 1
236 | # self.ampMulti = .5
237 | # self.time = 0
238 | #
239 | # def function(self, tran, st, at):
240 | # from math import sin, pi, ceil
241 | # rx1, rx2 = self.randoms[int(ceil(st*self.hz)%100)]
242 | # offset = rx1*self.peak*sin(2*pi*self.hz*st) + rx2*self.peak*self.ampMulti*sin(2*pi*self.hz*2*self.octaves*(st+self.time))
243 | # setattr(tran, self.property, offset)
244 | # return 0
245 |
--------------------------------------------------------------------------------
/ActionEditor_config.rpy:
--------------------------------------------------------------------------------
1 | init 999 python in _viewers:
2 | #this is used for default transition
3 | #デフォルトで使用されるトランジションの文字列です。Noneも指定可能です。
4 | default_transition = "dissolve"
5 | init -999 python in _viewers:
6 | #hide winodw during animation in clipboard data
7 | #アニメーション中ウィンドウを隠すようにクリップボードを出力するか決定します
8 | #シーンが1つのとき動作します。
9 | hide_window_in_animation = True
10 | #If this is True and hide_window_in_animation is True, allow animation to be skipped
11 | #アニメーションをスキップできる形式でクリップボードに出力します。hide_window_in_animationがTrueかつ
12 | #シーンが1つのとき動作します。
13 | allow_animation_skip = True
14 | #this is used for default warper
15 | #デフォルトで使用されるwarper関数名の文字列を指定します。
16 | default_warper = "linear"
17 | # If True, show rot default.
18 | #True, なら格子をデフォルトで表示します。
19 | default_rot = True
20 | # If True, simulate defpth of field and focusing is enable by default.
21 | # Trueならカメラブラーを再現するフォーカシングをデフォルトで有効にします。
22 | focusing = False
23 | # If True, show icons which is dragged to move camera or iamges by default
24 | # Trueならドラッグでカメラや画像を移動できるアイコンをデフォルトで表示します。
25 | default_show_camera_icon = True
26 | # If True, One line includes only one property in clipboard data
27 | # Trueならクリップボードデータで一行に1つのプロパティーのみ記述します。
28 | default_one_line_one_prop = False
29 | # If True, use legacy action editor screen
30 | # Trueなら以前のレイアウトでActionEditorを表示します。
31 | default_legacy_gui = False
32 | # If True, set camera keymap FPS(wasd), otherwise vim(hjkl)
33 | #Trueなら、カメラはWASD, wasdで、Falseならhjkl, HJKLで移動します。
34 | fps_keymap = True
35 | # If True, only one page is opened at once. this has no effect for legacy gui
36 | #Trueなら、一度に1つの項目のみ開きます。これはレガシーGUIでは無効です。
37 | default_open_only_one_page = False
38 | # the number of tabs shown at onece(In legacy GUI).
39 | #一度に表示する画像タグ数を設定します(レガシーGUIのみ)。
40 | tab_amount_in_page = 5
41 | #The blur value where the distance from focus position is dof.
42 | #フォーカシングでフォーカス位置からDOF離れた場所でのブラー量を設定します。
43 | _camera_blur_amount = 2.0
44 | #warper function name which is used for the distance from focus position and blur amount.
45 | #フォーカス位置からの距離とカメラブラーの効きを決定するwarper関数名の文字列です
46 | _camera_blur_warper = "linear"
47 | # the range of values of properties for int type(In legacy GUI)
48 | #エディターのバーに表示する整数の範囲です(レガシーGUIのみ)。
49 | wide_range = 1500
50 | # the range of values of properties for float type(In legacy GUI)
51 | #エディターのバーに表示する浮動小数の範囲です(レガシーGUIのみ)。
52 | narrow_range = 7.0
53 | # change per pix
54 | #Set the amount of change per pixel when dragging the value of the float property(In new GUI)
55 | narrow_drag_speed = 1./200
56 | #Set the amount of change per pixel when dragging the value of the integer property(In new GUI)
57 | #整数プロパティーの値をドラッグしたときの1pixelごとの変化量を設定します(新GUIのみ)。
58 | wide_drag_speed = int(config.screen_width/200)
59 | # the range of time
60 | #エディターのバーに表示する時間の範囲です。
61 | time_range = 7.0
62 | # the list of channel for playing
63 | # ActionEditorで使用するチャンネルのリストです
64 | default_channel_list = ["sound"]
65 | #default side view.
66 | default_sideview = True
67 | #Not included layers
68 | not_included_layer = ("transient", "screens", "overlay")
69 |
70 | default_graphic_editor_narrow_range = 2.
71 | default_graphic_editor_wide_range = 2000
72 |
73 | preview_size=0.6
74 | preview_background_color="#111"
75 |
76 | props_sets = (
77 | ("Child/Pos ", ("child", "xpos", "ypos", "zpos", "xaround", "yaround", "radius", "angle", "rotate",
78 | "xrotate", "yrotate", "zrotate", "xorientation", "yorientation", "zorientation", "point_to",)),
79 | ("3D Matrix ", ("matrixtransform",)),
80 | ("Anchor/Offset", ("xanchor", "yanchor", "matrixanchorX", "matrixanchorY", "xoffset", "yoffset")),
81 | ("Zoom/Crop ", ("xzoom", "yzoom", "zoom", "cropX", "cropY", "cropW", "cropH")),
82 | ("Effect ", ("blend", "alpha", "blur", "additive", "matrixcolor", "dof", "focusing")),
83 | ("Misc ", ("zzoom", "perspective", "function", "xpan", "ypan", "xtile", "ytile")),
84 | )
85 |
86 | props_groups = {
87 | "around":["xaround", "yaround"],
88 | "matrixanchor":["matrixanchorX", "matrixanchorY"],
89 | "crop":["cropX", "cropY", "cropW", "cropH"],
90 | "focusing":["focusing", "dof"],
91 | "orientation":["xorientation", "yorientation", "zorientation"],
92 | }
93 |
94 | #These variables are always wide range even if it is float type.
95 | #浮動小数であっても整数と同じスケールで表示される変数です。
96 | force_wide_range = {"rotate", "rotateX", "rotateY", "rotateZ", "offsetX", "offsetY", "offsetZ", "zpos", "xoffset", "yoffset", "hue", "dof", "focusing", "angle", "xpan", "ypan", "xrotate", "yrotate", "zrotate", "xorientation", "yorientation", "zorientation"}
97 | force_narrow_range = {"xtile", "ytile"}
98 | #These variables are always plus
99 | #常に正数になる変数です。
100 | force_plus = {"additive", "blur", "alpha", "invert", "contrast", "saturate", "cropW", "cropH", "dof", "focusing", "xtile", "ytile"}
101 | #These varialbes aren't setted without keyframe.
102 | #crop doesn't work when perspective True and rotate change the pos of image when perspective is not True
103 | #キーフレームを設定しなければ適用されない変数です。
104 | not_used_by_default = {"rotate", "cropX", "cropY", "cropW", "cropH", "xpan", "ypan", "function"}
105 | #These variables are always float type.
106 | #常に浮動小数になる変数です。
107 | force_float = ("zoom", "xzoom", "yzoom", "alpha", "additive", "blur", "invert", "contrast", "saturate", "bright", "xaround", "yaround", "scaleX", "scaleY", "scaleZ", "xrotate", "yrotate", "zrotate", "xorientation", "yorientation", "zorientation")
108 |
109 | boolean_props = {"zzoom"}
110 | any_props = {"blend", "point_to"}
111 | def check_perspective(v):
112 | if isinstance(v, (int, float)):
113 | return True
114 | if isinstance(v, tuple) and len(v) == 3:
115 | for i in v:
116 | if not isinstance(v, (int, float)):
117 | return False
118 | else:
119 | return True
120 | check_any_props = {"perspective":check_perspective}
121 | def check_poi(v):
122 | if isinstance(v, tuple) and len(v) == 3:
123 | x, y, z = v
124 | if isinstance(x, (int, float)) and isinstance(y, (int, float)) and isinstance(z, (int, float)):
125 | return True
126 | elif isinstance(v, renpy.display.transform.Camera):
127 | return True
128 | elif v is None:
129 | return True
130 | else:
131 | return False
132 | check_any_props = {"point_to":check_poi}
133 | #properties which is included in any_props and is choiced by menu.
134 | menu_props = {"blend":[None] + [key for key in config.gl_blend_func]}
135 |
136 | #disallow properties to edit at sametime.
137 | #Editorの都合で同時に編集されたくないプロパティー
138 | exclusive = (
139 | ({"xpos", "ypos"}, {"xaround", "yaround", "radius", "angle"}),
140 | # ({"xpan", "ypan"}, {"xtile", "ytile"}),
141 | )
142 | disallow_spline = ("focusing", "matrixtransform", "matrixcolor", "orientation")
143 | xygroup = {"pos": ("xpos", "ypos"), "anchor": ("xanchor", "yanchor"), "offset": ("xoffset", "yoffset")}
144 | default_matrixtransform = [
145 | ("matrixtransform_1_1_scaleX", 1.), ("matrixtransform_1_2_scaleY", 1.), ("matrixtransform_1_3_scaleZ", 1.),
146 | ("matrixtransform_2_1_offsetX", 0.), ("matrixtransform_2_2_offsetY", 0.), ("matrixtransform_2_3_offsetZ", 0.),
147 | ("matrixtransform_3_1_rotateX", 0.), ("matrixtransform_3_2_rotateY", 0.), ("matrixtransform_3_3_rotateZ", 0.),
148 | ("matrixtransform_4_1_offsetX", 0.), ("matrixtransform_4_2_offsetY", 0.), ("matrixtransform_4_3_offsetZ", 0.),
149 | ("matrixtransform_5_1_offsetX", 0.), ("matrixtransform_5_2_offsetY", 0.), ("matrixtransform_5_3_offsetZ", 0.),
150 | ]
151 | default_matrixcolor = [
152 | ("matrixcolor_1_1_invert", 0.),
153 | ("matrixcolor_2_1_contrast", 1.),
154 | ("matrixcolor_3_1_saturate", 1.),
155 | ("matrixcolor_4_1_bright", 0.),
156 | ("matrixcolor_5_1_hue", 0.),
157 | ]
158 | #The order of properties in clipboard data.
159 | #この順番でクリップボードデータが出力されます
160 | #ないものは出力されません
161 | sort_order_list = (
162 | "blend",
163 | "pos",
164 | "anchor",
165 | "offset",
166 | "xpos",
167 | "xanchor",
168 | "xoffset",
169 | "ypos",
170 | "yanchor",
171 | "yoffset",
172 | "around",
173 | "radius",
174 | "angle",
175 | "zpos",
176 | "xrotate",
177 | "yrotate",
178 | "zrotate",
179 | "orientation",
180 | "point_to",
181 | "matrixtransform",
182 | "matrixanchor",
183 | "rotate",
184 | "xzoom",
185 | "yzoom",
186 | "zoom",
187 | "crop",
188 | "alpha",
189 | "additive",
190 | "blur",
191 | "matrixcolor",
192 | "xpan",
193 | "ypan",
194 | "xtile",
195 | "ytile",
196 | )
197 |
198 |
199 | #clipboardで個別に出力するプロパティー
200 | special_props = {"child", "function"}
201 | in_editor = False
202 | aspect_16_9 = round(float(config.screen_width)/config.screen_height, 2) == 1.78
203 |
204 | init 999 python in _viewers:
205 | #The properties used in image tag tab
206 | #画像タブに表示されるプロパティー
207 | #(property name, default value)
208 | transform_props = [
209 | "child",
210 | "xpos",
211 | "ypos",
212 | "zpos",
213 | "xaround",
214 | "yaround",
215 | "radius",
216 | "angle",
217 | "xanchor",
218 | "yanchor",
219 | "matrixanchorX",
220 | "matrixanchorY",
221 | "xoffset",
222 | "yoffset",
223 | "rotate",
224 | "xzoom",
225 | "yzoom",
226 | "zoom",
227 | "cropX",
228 | "cropY",
229 | "cropW",
230 | "cropH",
231 | "matrixtransform",
232 | "dof",
233 | "focusing",
234 | "alpha",
235 | "additive",
236 | "blur",
237 | "matrixcolor",
238 | "zzoom",
239 | "xpan",
240 | "ypan",
241 | "xtile",
242 | "ytile",
243 | "blend",
244 | "function",
245 | ]
246 |
247 | #The properties used in camera tab
248 | #カメラタブに表示されるプロパティー
249 | #(property name, default value)
250 | camera_props = [
251 | "xpos",
252 | "ypos",
253 | "zpos",
254 | "xaround",
255 | "yaround",
256 | "radius",
257 | "angle",
258 | "xanchor",
259 | "yanchor",
260 | "matrixanchorX",
261 | "matrixanchorY",
262 | "xoffset",
263 | "yoffset",
264 | "rotate",
265 | "xzoom",
266 | "yzoom",
267 | "zoom",
268 | "cropX",
269 | "cropY",
270 | "cropW",
271 | "cropH",
272 | "matrixtransform",
273 | "dof",
274 | "focusing",
275 | "alpha",
276 | "additive",
277 | "blur",
278 | "matrixcolor",
279 | "xpan",
280 | "ypan",
281 | "xtile",
282 | "ytile",
283 | "perspective",
284 | "function",
285 | ]
286 |
287 | if check_version(23032300):
288 | transform_props += [
289 | "xrotate",
290 | "yrotate",
291 | "zrotate",
292 | "xorientation",
293 | "yorientation",
294 | "zorientation",
295 | "point_to"]
296 |
297 | camera_props += [
298 | "xrotate",
299 | "yrotate",
300 | "zrotate",
301 | "xorientation",
302 | "yorientation",
303 | "zorientation",
304 | "point_to"]
305 |
306 | property_default_value = {
307 | "child": (None, None),
308 | "xpos": 0,
309 | "ypos": 0,
310 | "zpos": 0.,
311 | "xaround": 0.,
312 | "yaround": 0.,
313 | "around": (0., 0.),
314 | "radius": 0,
315 | "angle": 0,
316 | "xanchor": 0,
317 | "yanchor": 0,
318 | "matrixanchorX": 0.5,
319 | "matrixanchorY": 0.5,
320 | "matrixanchor": (0.5, 0.5),
321 | "xoffset": 0,
322 | "yoffset": 0,
323 | "rotate": 0.,
324 | "xzoom": 1.,
325 | "yzoom": 1.,
326 | "zoom": 1.,
327 | "cropX": 0.,
328 | "cropY": 0.,
329 | "cropW": 1.,
330 | "cropH": 1.,
331 | "crop": (0., 0., 1., 1.),
332 | "xrotate":0.,
333 | "yrotate":0.,
334 | "zrotate":0.,
335 | "xorientation": 0.,
336 | "yorientation": 0.,
337 | "zorientation": 0.,
338 | "orientation": (0., 0., 0.),
339 | "point_to": None,
340 | "offsetX": 0.,
341 | "offsetY": 0.,
342 | "offsetZ": 0.,
343 | "rotateX": 0.,
344 | "rotateY": 0.,
345 | "rotateZ": 0.,
346 | "scaleX": 1.,
347 | "scaleY": 1.,
348 | "scaleZ": 1.,
349 | "dof": 400,
350 | "focusing": round(renpy.config.perspective[1], 2),
351 | "alpha": 1.,
352 | "additive": 0.,
353 | "blur": 0.,
354 | "hue": 0.,
355 | "bright": 0.,
356 | "saturate": 1.,
357 | "contrast": 1.,
358 | "invert": 0.,
359 | "zzoom": False,
360 | "xpan": 0.,
361 | "ypan": 0.,
362 | "xtile": 1,
363 | "ytile": 1,
364 | "function": (None, None),
365 | "perspective": None, #Falseならカメラ動作せず、Noneなら普通の画像として動作
366 | "blend": "normal",
367 | }
368 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 本ライブラリでは、GUI上で設定できる演出エディターおよび画像ビューワーとサウンドビューワー、さらにATLのfunctionステートメントでの使用を意図した便利な関数群と多数のワーパー関数を追加します。
2 | 日本語マニュアルはドキュメント後半にあります。
3 |
4 | This script adds Ren'py the ability to adjust and view transform properties of images
5 | and camera by in-game Action Editor, Image Viewer and Sound Viewer.
6 | Many warpers and useful functions intended to be used in function statements in ATL are
7 | also added.
8 |
9 | Ren'Py
10 |
11 | lemma forum
12 |
13 |
14 | youtube samples:
15 | * Tutorials チュートリアル
16 |
17 | * Introduce ATL_functions
18 | * Introduce generate warper
19 | * Introduce ActionEditor Update 20220212
20 |
21 | 
22 |
23 |
24 |
25 | English Document
26 | ================
27 |
28 | This script adds Ren'py the ability to adjust and view transform properties of images
29 | and camera by in-game Action Editor, Image Viewer and Sound Viewer.
30 | Many warpers and useful functions intended to be used in function statements in ATL are
31 | also added.
32 |
33 | About old version
34 | ================
35 | This is available in v7.4.5 later.
36 | To use an older version, use the old version of ActionEditor.
37 |
38 |
39 | In the current version of ActionEditor, the below functions are removed.
40 | * expression
41 | * loading last action
42 |
43 | To install
44 | ================
45 | To install, copy all files in the camera directory into your game directory.
46 | ActionEditor.rpy is required for release version if you use camera blur or warper_generator.
47 | 00warper.rpy is also required if you use added warpers.
48 | ATL_funcctions.rpy is also required if you use added functions for ATL statement.
49 | Other files are not required.
50 |
51 | Action Editor
52 | ================
53 |
54 | This allows you to adjust transform properties of camera and images in
55 | real-time with a GUI. It can then generate a script based on these changes and
56 | place it on the clipboard for later pasting into Ren'Py scripts.
57 |
58 | When `config.developer` is True, pressing action_editor (by default,
59 | "shift+P") will open the Action editor.
60 |
61 | The Action Editor has the following features:
62 |
63 | * View and adjust the transform properties of images and camera by adjusting a bar or typing a value.
64 | * View and adjust the x and y coordinates of the camera with a draggable camera icon.
65 | * Adjust the z coordinate of the camera with the mouse wheel.
66 | * Adjust the x,y coordinate of the camera with the keyboard(hjkl, HJKL, wasd, WASD).
67 | * Reset the value by right-clicking on the value button.
68 | * Add, delete, and edit keyframes on a timeline like video editing software.
69 | * The spline motion and loop is available
70 | * After setting up a scene with the desired look and animations, the Action
71 | Editor will generate a script and place it on your clipboard for pasting
72 | into your Ren'Py scripts. (v6.99 and later only)
73 | * Introducing the concept of depth of field and allow to adjust focus position and dof.
74 | Blur each image according to dof, focus position and the distance between the camera and the image.
75 | * Show, replace and hide a image with transition(use None for a image name to hide image)
76 | * Change a scene with scene statement.
77 | * There is the option for hiding window during the ATL animation in clipboard data.
78 | * There is the option for allowing to skip ATL animation in clipboard data.
79 |
80 | Note
81 | * blur transform property of each images are used for simulating camera blur in function transform property,
82 | so blur transform properties of each images aren't available when focusing is enabled.
83 | Set function property to None when you want to disable camera blur for already shown images.
84 | * Unfortunately, The behavior of functions for function property isn't the same as ATL.
85 | There are some different points.
86 | 1. inherited_ have no value.
87 | 2. Setting properties have no effect when it is called next time.
88 | 3. The return value from it has no effect.
89 | 4. It isn't always called in time.
90 | ActionEditor can't get current function when opened.
91 |
92 | * Skipping animations may not work when those include the tags which are already shown and have loop animations.
93 | When using functions other than camera_blur, these may cause malfunction after skip.
94 | * ActionEditor supports ScaleMatrix, OffsetMatrix, RotateMatrix and ignores other matrixtransforms.
95 | * ActionEditor supports InvertMatrix, ContrastMatrix, SaturationMatrix, BrightnessMatrix, HueMatrix and ignores other matrixcolors.
96 |
97 |
98 | How to add desired properties to the editor.
99 | ================
100 |
101 | variable is edited in ActionEditor_config.rpy.
102 |
103 | Commonly, add the following variables the property name you want to add to be added.:
104 |
105 | * `props_set`: control where that is shown in ActionEditor.
106 | * `sort_order_list`: control where that is shown in the clipboard.
107 | * `transform_props` or `camera_props`: Add the the property name.
108 | Adding `transform_props` shows it in each images and Adding `camera_props` shows it in camera.
109 | * `property_default_value`: Add the default value of the property.
110 |
111 | Further add the following variables according to the type of property.
112 |
113 | If it is integer or float and required. :
114 |
115 | * `force_wide_range`: it has the same scale as integer even when it is float type.
116 | * `force_narrow_range`: it has the same scale as float even when it is int type.
117 | * `force_plus`: it is always plus.
118 | * `force_float`: it is always float.
119 |
120 | If it is boolean type. :
121 |
122 | * `boolean_props`
123 |
124 | Others:
125 |
126 | * `any_props`: this accepts all types. I recommend also using `check_any_props` or `menu_props`.
127 |
128 | * `check_any_props`: This maps a property name to the function. This is called
129 | with the value of the property and set the property the value if result is
130 | True. Otherwise, the error message is shown.
131 |
132 | any_props = {"blend"}
133 | check_any_props = {"blend":lambda v: v in (None, "normal", "add", "multiply", "min", "max")}
134 |
135 | * `menu_props` : use selectable buttons to change `anpy_props` instead of input screen.
136 |
137 | any_props = {"blend"}
138 | menu_props = {"blend":[None] + [key for key in config.gl_blend_func]}
139 |
140 | Exclusive properties like tile and pan should be set in `exclusive`. example:
141 |
142 | exclusive = (
143 | ({"xpos", "ypos"}, {"xalignaround", "yalignaround", "radius", "angle"}),
144 | ({"xtile", "ytile"}, {"xpan", "ypan"}),
145 | )
146 |
147 |
148 | Property Group
149 | ================
150 |
151 | For tuples, you can use `props_groups` where that key is the property name and that value
152 | is the tuple of each element name, so that they can be edited individually. example:
153 |
154 | props_groups = {
155 | "alignaround":["xalignaround", "yalignaround"],
156 | "matrixanchor":["matrixanchorX", "matrixanchorY"],
157 | "crop":["cropX", "cropY", "cropW", "cropH"],
158 | "focusing":["focusing", "dof"],
159 | }
160 |
161 |
162 | Image Viewer
163 | ================
164 | If `config.developer` is True, pressing Shift+U or +(add image) textbutton on ActionEditor
165 | to open Image Viewer.
166 |
167 | Defined image tags and attribute textbuttons are shown in this viewer.
168 | You can filter them by the text entered in the top-most text entry field.
169 | The completion feature is also available by tab.
170 |
171 | When these textbuttons get focus and the same image name exists as these text, the image is
172 | shown.
173 | Pressing the textbutton add that text to the filter if the same image name doesn't exist
174 | as that text. the image is added to ActionEditor if that exist and viewer is opened by
175 | ActionEditor. the image name is outputted to the clipboard if that exist and viewer isn't
176 | opened by ActionEditor.
177 |
178 | Pressing clipboard button at the bottom also outputs the filter string to clipboard
179 |
180 |
181 | Sound Viewer
182 | ================
183 | If `config.developer` is True, pressing Shift+S or sounds textbutton on ActionEditor
184 | to open Sound Viewer.
185 |
186 | Variable names in audio store are shown in this viewer.
187 | The music files should be automatically defined as these name.
188 | You can filter them by the text entered in the top-most text entry field.
189 | The completion feature is also available by tab.
190 |
191 | When these textbuttons get focus and the music file is played.
192 | Pressing the textbutton adds that to ActionEditor if the viewer is opened by ActionEditor.
193 | Otherwise, that name is outputted to the clipboard.
194 |
195 | Pressing clipboard button at the bottom also outputs the filter string to clipboard
196 |
197 | ATL functions
198 | ================
199 | ATL_funcctions.rpy adds useful functions which are intended to be used for
200 | function statement in ATL block. For more information, see that file.
201 |
202 |
203 | Matrix
204 | ================
205 |
206 | The default matrix and order for each is as follows.
207 |
208 | matrixtransform: ScaleMatrix*OffsetMatrix*RotateMatrix*OffsetMatrix*OffsetMatrix
209 | matrixcolors: InvertMatrix*ContrastMatrix*SaturationMatrix*BrightnessMatrix*HueMatrix
210 |
211 | You can change default matrix, that order and default value by editing default_matrixtransform or default_matrixcolor in ActionEditor_config.rpy.
212 |
213 | default_matrixtransform = [
214 | ("matrixtransform_1_1_scaleX", 1.), ("matrixtransform_1_2_scaleY", 1.), ("matrixtransform_1_3_scaleZ", 1.),
215 | ("matrixtransform_2_1_offsetX", 0.), ("matrixtransform_2_2_offsetY", 0.), ("matrixtransform_2_3_offsetZ", 0.),
216 | ("matrixtransform_3_1_rotateX", 0.), ("matrixtransform_3_2_rotateY", 0.), ("matrixtransform_3_3_rotateZ", 0.),
217 | ("matrixtransform_4_1_offsetX", 0.), ("matrixtransform_4_2_offsetY", 0.), ("matrixtransform_4_3_offsetZ", 0.),
218 | ("matrixtransform_5_1_offsetX", 0.), ("matrixtransform_5_2_offsetY", 0.), ("matrixtransform_5_3_offsetZ", 0.),
219 | ]
220 | default_matrixcolor = [
221 | ("matrixcolor_1_1_invert", 0.),
222 | ("matrixcolor_2_1_contrast", 1.),
223 | ("matrixcolor_3_1_saturate", 1.),
224 | ("matrixcolor_4_1_bright", 0.),
225 | ("matrixcolor_5_1_hue", 0.),
226 | ]
227 |
228 |
229 | Text Size
230 | ================
231 |
232 | All text style is changeable by new_action_editor_text style.
233 |
234 | init:
235 | style new_action_editor_text:
236 | size 10
237 |
238 | Troubleshooting
239 | ================
240 |
241 | Layout is corrupted
242 |
243 | Too long tag names and big font sizes corrupt the layout of ActionEditor.
244 | In that case, try to adjust the size of font by the above manner.
245 |
246 |
247 | Known issue
248 | ================
249 |
250 | ActionEditor can't show camera and displayable with "at clause" including animation correctly.
251 |
252 | ActionEditor can't show movie displayable correctly.
253 |
254 |
255 | Note
256 | ================
257 |
258 | The clipboard from ActionEditor includes the difference from the state when ActionEditor is opened on. Therefore that is intended to be pasted on next that line. Images aren't shown correctly if the existing lines are overwritten.
259 |
260 |
261 | 日本語ドキュメント
262 | ================
263 | 本ライブラリでは、GUI上で設定できる3Dステージ対応の演出エディター、および画像ビューワーとサウンドビューワーさらに多数のワーパー関数とATLのfunctionステートメントでの使用を意図した便利な関数群を追加します。
264 |
265 | 旧バージョンについて
266 | ================
267 |
268 | Ren'Py v7.4.5から追加された3Dステージ機能により、旧版にあった自作の3Dカメラ再現関数は不要になりました。
269 | v7.4.5以前のバージョンでは旧版のActionEditorを使用してください。
270 |
271 |
272 | 3Dカメラの再現を自作スクリプトから3Dステージに切り替えたことにより、旧版にあった最後のアクションを読み込む機能とエクスプレッション機能はなくなりました。
273 | 使用したい場合はそれぞれ以下で代用してください。
274 | * エクスプレッション function ステートメントで代用してください。
275 |
276 | インストール方法
277 | ================
278 |
279 | 使用にはフォルダ内のファイルをgameフォルダにコピーしてください。
280 | リリース時には追加したファイルは不要になりますが、次の場合は配布ファイルに追加ファイルを残してください。
281 | * カメラブラー、ワーパージェネレータを使用している場合にはActionEditor.rpが必要です。
282 | * 追加ワーパーを使用している場合は00warper.rpyが必要です。
283 | * function ステートメント向け追加関数を使用している場合はATL_functions.rpyが必要です。
284 |
285 | 演出エディター(Action Editor)
286 | ================
287 |
288 | 演出エディターではcameraや画像の transform プロパティーをGUI上で変更し、結果を
289 | 確認できます。さらにそれらの値を時間軸に沿って変更可能なので、スクリプトを変更
290 | するたびに、リロードで結果を確認する従来の方法より遥かに短時間でアニメーション
291 | を作成可能です。設定したアニメーションはクリップボード経由でスクリプトに貼り付
292 | けられます。
293 | さらにfocusingを有効にすると被写界深度の概念をRen'Pyに導入して、カメラと画像と
294 | の距離に応じてブラーがかかるようにもできます。
295 |
296 | config.developer が True なら、Shift+Pで演出エディターが起動します。
297 |
298 | 演出エディターでは以下の機能が利用可能です。:
299 |
300 | * カメラや各画像の transform プロパティーを直接数値入力またはバーの操作により変更
301 | * カメラアイコンのドラッグでカメラのx,y座標を移動
302 | * マウスホイールでカメラのz座標を移動
303 | * キーボード(hjkl,HJKL,wasd,WASD)によりカメラのxy座標を移動
304 | * 数値を右クリックでリセット
305 | * 動画編集ソフトの様にキーフレームを設定して時間軸にそった演出を作成
306 | * transform プロパティーへのスプライン補間やループ設定
307 | * 作成した演出のコードをクリップボードに送る(v6.99以上, Windows限定)
308 | * 被写界深度の概念を導入し、フォーカス位置と被写界深度を操作可能にする。これらの
309 | 値とカメラと各画像のz座標から各画像にブラーがかけられる(通常のブラーと排他)
310 | * トランジションを伴う画像の表示、置き換え、非表示
311 | (画像を非表示するには画像名にNoneを入力してください)
312 | * sceneステートメントによるシーンの切り替え
313 | * オプションから、アニメーション中はウィンドウを非表示にするフォーマットでクリップボードに出力するか選択可
314 | (複数シーンを使用する場合は強制的にウィンドウ非表示となります)
315 | * オプションから、アニメーションスキップ可能にするフォーマットでクリップボードに出力するか選択可
316 | (複数シーンを使用する場合は強制的にスキップ可となります)
317 |
318 | 注意
319 |
320 | * focusingを有効化している間、function transform プロパティーで利用しているため各画像のblurは利用できなくなります。
321 | * function ステートメントに関数を指定できますが、ActionEditorとATL中で関数が同じ動作をしないことに注意してください。
322 | 以下の制限があります。
323 | 1. inherited_(property) では値を取得できません
324 | 2. プロパティーを変更しても次のその関数呼び出し時の値には反映されません
325 | 3. 返り値は機能しません
326 | 4. 時間どおりの順に呼び出されるとは限りません。
327 | これらの制限のため、プロパティーの値に対するオフセットとして動作させるには癖があり、もっぱらx,yoffsetへの値の代入が主な用途となるでしょう。
328 | 加えて、ActionEditor起動時に現在のfuncitonは読み込めません
329 | 参考リンク
330 | https://akakyouryuu.com/renpy/atl-%e3%81%aefunction%e3%82%b9%e3%83%86%e3%83%bc%e3%83%88%e3%83%a1%e3%83%b3%e3%83%88%e3%81%a7%e3%83%97%e3%83%ad%e3%83%91%e3%83%86%e3%82%a3%e3%83%bc%e3%81%ae%e5%80%a4%e3%82%92%e3%82%aa%e3%83%95/
331 | * camera_blur 以外を function プロパティーに使用しているとスキップ後に誤作動する可能性があります。
332 | * アニメーション開始前から同じタグの画像がすでに表示されており、かつそのタグのアニメーションにループが含まれている場合は正常に動作しません。
333 | 参考リンク
334 | http://akakyouryuu.com/renpy/renpy%e3%81%aeatl%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e3%82%af%e3%83%aa%e3%83%83%e3%82%af%e3%81%a7%e3%82%b9%e3%82%ad%e3%83%83%e3%83%97%e3%81%a7%e3%81%8d%e3%82%8b/
335 | * matrixtransformはScaleMatrix, OffsetMatrix, RotateMatrixのみサポートしています。それ以外は無視されます。
336 | * matrixcolorはInvertMatrix, ContrastMatrix, SaturationMatrix, BrightnessMatrix, HueMatrixのみサポートしています。それ以外は無視されます。
337 |
338 |
339 | 任意のプロパティーをエディターに追加する方法
340 | ================
341 |
342 | ActionEditor_config.rpy を編集します。
343 |
344 | 共通の設定項目として以下に追加したいプロパティー名を加えます。:
345 |
346 | * `props_set`: ActionEditor上でプロパティーが表示される位置を指定します。
347 | * `sort_order_list`: クリップボードに出力されるプロパティーの順番を指定します。
348 | * `transform_props` または `camera_props`: プロパティー名を追加してください。前者は画像に、後者はカメラにプロパティーを追加します。
349 | * `transform_props` または `camera_props`: プロパティー名を追加してください。前者は画像に、後者はカメラにプロパティーを追加します。
350 | * `property_default_value`: プロパティーのデフォルト値を設定してください。
351 |
352 | さらに追加したいプロパティーの型に応じて設定します。
353 |
354 | 整数または浮動小数の場合、必要なら以下に追加したいプロパティー名を加えます。:
355 |
356 | * `force_wide_range`: 値が浮動小数でも整数と同じ幅で値を調整できます。
357 | * `force_narrow_range`: 値が整数でも浮動小数と同じ幅で値を調整できます。
358 | * `force_plus`: 常に値が正の数となります。
359 | * `force_float`: 常に値が浮動小数となります。
360 |
361 | 真偽値の場合、以下に追加したいプロパティー名を加えます。:
362 |
363 | * `boolean_props`
364 |
365 | 他の型の場合、以下に追加したいプロパティー名を加えます。:
366 |
367 | * `any_props`
368 |
369 | `any_props` はすべての型を受け入れます。使用するなら `check_any_props` か `menu_props`と併用すると安全です。
370 |
371 | * `check_any_props`
372 |
373 | エラーチェックを設定します。プロパティー名とチェック関数を対応させる辞書です。
374 | 関数はプロパティーの値を引数に実行され、結果がTrueならその値を入力し、Falseならエラーメッセージを表示します。 例:
375 |
376 | any_props = {"blend"}
377 | #"blend"プロパティーの入力を(None, "normal", "add", "multiply", "min", "max")に限定する
378 | check_any_props = {"blend":lambda v: v in (None, "normal", "add", "multiply", "min", "max")}
379 |
380 | * `menu_props`
381 |
382 | `any_props` の変更を直接入力ではなく選択制にします。 例:
383 |
384 | any_props = {"blend"}
385 | #"blend"プロパティー(None, "normal", "add", "multiply", "min", "max")からの選択制にする
386 | menu_props = {"blend":[None] + [key for key in config.gl_blend_func]}
387 |
388 | tileとpanのような排他的なプロパティーは `exclusive` にも登録してください。例:
389 |
390 | exclusive = (
391 | ({"xpos", "ypos"}, {"xalignaround", "yalignaround", "radius", "angle"}),
392 | ({"xtile", "ytile"}, {"xpan", "ypan"}),
393 | )
394 |
395 |
396 | プロパティーグループ
397 | ================
398 |
399 | 値がタプルであるプロパティーは props_groups でプロパティー名をキーに、
400 | 各要素名を値にして登録すれば個別に編集できます。例:
401 |
402 | props_groups = {
403 | "alignaround":["xalignaround", "yalignaround"],
404 | "matrixanchor":["matrixanchorX", "matrixanchorY"],
405 | "crop":["cropX", "cropY", "cropW", "cropH"],
406 | "focusing":["focusing", "dof"],
407 | }
408 |
409 |
410 | 画像ビューワー
411 | ================
412 |
413 | `config.developer` が True なら、ゲーム画面でShift+UまたはActionEditor上の+(add image)のボタンから開けます。
414 |
415 | 定義済の画像のタグ、属性のテキストボタンとして一覧表示します。
416 | 最上段のテキスト入力欄に入力されたテキストで表示結果をフィルターします。
417 | フィルターではタブキーでの補完も可能です。
418 |
419 | テキストボタンにフォーカスするとそのテキストに対応する画像名があればその画像を表示します。
420 | ボタンを押すと、対応する画像名がなければ、そのテキストをフィルターに追加します。
421 | ある場合、ActionEditor上から開いてれば、それをActionEditorに追加します。そうでなければ、
422 | その画像名をクリップボードに出力します。
423 |
424 |
425 | 最底段のclipboardボタンでフィルターテキストをクリップボードに出力できます。
426 |
427 |
428 | サウンドビューワー
429 | ================
430 |
431 | `config.developer` が True なら、ゲーム画面でShift+SまたはActionEditor上のSoundsの項目から開けます。
432 |
433 | audio store にある変数名をテキストボタンとして一覧表示します。
434 | 音声ファイルがgame/audioディレクトリーにあれば変数は自動定義されるはずです。
435 | 最上段のテキスト入力欄に入力されたテキストで表示結果をフィルターします。
436 | フィルターではタブキーでの補完も可能です。
437 |
438 | ボタンにフォーカスするとその音声が再生されます。
439 | ボタンをクリックするとActionEditor上から開いていれば、それがActionEditorに追加されます。
440 | そうでなければ、そのボタンテキストをクリップボードに出力します。
441 |
442 | 最低段のclipboardボタンでフィルターテキストをクリップボードに出力できます。
443 |
444 |
445 | ATL functions
446 | ================
447 |
448 | ATL_funcctions.rpy に ATL function ステートメントでの使用を意図した関数群を用意しました。
449 | 使用方法は該当ファイルを参照してください。
450 |
451 |
452 | Matrix
453 | ================
454 |
455 | デフォルトのマトリックスと順番はそれぞれ以下のようになっています。
456 |
457 | matrixtransform: ScaleMatrix*OffsetMatrix*RotateMatrix*OffsetMatrix*OffsetMatrix
458 | matrixcolors: InvertMatrix*ContrastMatrix*SaturationMatrix*BrightnessMatrix*HueMatrix
459 |
460 | マトリックスの組み合わと順番、デフォルト値はActionEditor_config.rpyの以下の変数で変更できます。
461 |
462 | default_matrixtransform = [
463 | ("matrixtransform_1_1_scaleX", 1.), ("matrixtransform_1_2_scaleY", 1.), ("matrixtransform_1_3_scaleZ", 1.),
464 | ("matrixtransform_2_1_offsetX", 0.), ("matrixtransform_2_2_offsetY", 0.), ("matrixtransform_2_3_offsetZ", 0.),
465 | ("matrixtransform_3_1_rotateX", 0.), ("matrixtransform_3_2_rotateY", 0.), ("matrixtransform_3_3_rotateZ", 0.),
466 | ("matrixtransform_4_1_offsetX", 0.), ("matrixtransform_4_2_offsetY", 0.), ("matrixtransform_4_3_offsetZ", 0.),
467 | ("matrixtransform_5_1_offsetX", 0.), ("matrixtransform_5_2_offsetY", 0.), ("matrixtransform_5_3_offsetZ", 0.),
468 | ]
469 | default_matrixcolor = [
470 | ("matrixcolor_1_1_invert", 0.),
471 | ("matrixcolor_2_1_contrast", 1.),
472 | ("matrixcolor_3_1_saturate", 1.),
473 | ("matrixcolor_4_1_bright", 0.),
474 | ("matrixcolor_5_1_hue", 0.),
475 | ]
476 |
477 |
478 | 文字サイズ
479 | ================
480 |
481 | new_action_editor_text スタイルから全てのテキストのスタイルを変更できます。
482 |
483 | init:
484 | style new_action_editor_text:
485 | size 10
486 |
487 |
488 | よくあるトラブル
489 | ================
490 | レイアウトが崩れる
491 |
492 | ActionEditorではタグ名が長過ぎる、フォントサイズが大きすぎる場合はレイアウトが崩れます。
493 | それらしい症状が発生した場合は上記の方法でフォントサイズを調整してください。
494 |
495 | 次のエラーが発生する
496 |
497 | NameError: name '_open_image_viewer' is not defined
498 |
499 | 旧版ActionEditorのファイルがあるゲームに本ActionEditor3のスクリプトファイルをコピーした場合に発生します。旧版とは互換性がないため、以前のActionEditorにあったファイルとスクリプト中で追加関数を使用していればそちらも削除してから、本ActionEditor3のファイルをコピーしてください。
500 |
501 | 既知の問題
502 | ================
503 |
504 | アニメーションするat 節を使用したcamera, displayableは正常に表示できない
505 |
506 | Movie DisplayableするDisplayableは正常に表示できない
507 |
508 | 注意
509 | ================
510 |
511 | ActionEditorから出力されるクリップボードデータはActionEditorが開かれた状態からの差分として出力され、その次の行への貼り付けを意図しています。このため既存のshowステートメントを上書きするように貼り付けると正常に表示されない場合があります。
512 |
--------------------------------------------------------------------------------
/image_viewer.rpy:
--------------------------------------------------------------------------------
1 | #Image Viewer
2 | #Shift+U: Open Image Viewer
3 | #2016 1/22 v6.99
4 |
5 | screen _image_selecter(default=""):
6 | default filter_string = default
7 | default filter_string_cache = default
8 | key "game_menu" action Return("")
9 | zorder 20
10 | frame:
11 | style_group "image_selecter"
12 | vbox:
13 | label _("Type a image name") style "image_selecter_input"
14 | label _("Tab: completion") style "image_selecter_input"
15 | input value ScreenVariableInputValue("filter_string", default=True, returnable=True) copypaste True style "image_selecter_input" id "input_filter_strings"
16 | $filtered_list = _viewers.filter_image_name(filter_string)
17 | viewport:
18 | mousewheel True
19 | scrollbars "vertical"
20 | vbox:
21 | for image_name in filtered_list:
22 | textbutton image_name action _viewers.Add_tag_or_Return(tuple(image_name.split())) hovered _viewers.ShowImage(tuple(image_name.split())) unhovered Function(renpy.hide, "preview", layer="screens")
23 | textbutton _("clipboard") action [SensitiveIf(filter_string), Function(_viewers.put_clipboard_text, filter_string)] xalign 1.0 idle_background None insensitive_background None
24 | if filter_string_cache != filter_string:
25 | if len(filtered_list) == 1:
26 | if "preview" not in renpy.get_showing_tags("screens"):
27 | $filter_string_cache = filter_string
28 | $_viewers.ShowImage(tuple(filtered_list[0].split()))()
29 | elif "preview" in renpy.get_showing_tags("screens"):
30 | $filter_string_cache = filter_string
31 | $_viewers._image_viewer_hide()
32 | key "K_TAB" action Function(_viewers.tag_completion, filter_string, filtered_list)
33 |
34 | init:
35 | style image_selecter_frame:
36 | background "#0006"
37 | xmaximum 400
38 | yfill True
39 | style image_selecter_viewport:
40 | ymaximum 600
41 | style image_selecter_input:
42 | outlines [ (absolute(1), "#000", absolute(0), absolute(0)) ]
43 | style image_selecter_button:
44 | size_group "image_selecter"
45 | idle_background None
46 | style image_selecter_button_text:
47 | color "#CCC"
48 | hover_underline True
49 | selected_color "#FFF"
50 | insensitive_color "#888"
51 | outlines [ (absolute(1), "#000", absolute(0), absolute(0)) ]
52 | xalign .0
53 |
54 | init -999 python in _viewers:
55 | def open_image_viewer():
56 | if not renpy.config.developer:
57 | return
58 | _skipping_org = renpy.store._skipping
59 | renpy.store._skipping = False
60 | renpy.invoke_in_new_context(renpy.call_screen, "_image_selecter")
61 | renpy.store._skipping = _skipping_org
62 |
63 | def filter_image_name(filter_string):
64 | filtered_list = []
65 | filter_elements = filter_string.split()
66 | if filter_elements:
67 | for name in get_image_name_candidates():
68 | if name[0].startswith(filter_elements[0]):
69 | if len(filter_elements) == 1:
70 | filtered_list.append(" ".join(name))
71 | else:
72 | for e in filter_elements[1:]:
73 | if e in name:
74 | continue
75 | else:
76 | for e2 in name[1:]:
77 | if e2.startswith(e):
78 | break
79 | else:
80 | break
81 | continue
82 | else:
83 | filtered_list.append(" ".join(name))
84 | else:
85 | filtered_list = list({name[0] for name in renpy.display.image.images})
86 | return filtered_list
87 |
88 | def put_clipboard_text(s):
89 | from pygame import scrap, locals
90 | scrap.put(locals.SCRAP_TEXT, s.encode("utf-8"))
91 | renpy.notify("'{}'\nis copied to clipboard".format(s))
92 |
93 | def tag_completion(filter_string, filtered_list):
94 | if filter_string and filter_string[-1] != " ":
95 | completed_string = filter_string.split()[-1]
96 | candidate = []
97 | if len(filter_string.split()) == 1:
98 | for es in filtered_list:
99 | candidate.append(es.split()[0])
100 | else:
101 | for es in filtered_list:
102 | for e in es.split()[1:]:
103 | if e.startswith(completed_string):
104 | candidate.append(e)
105 |
106 | if candidate:
107 | cs = renpy.current_screen()
108 | if len(candidate) > 1:
109 | completed_candidate = candidate[0]
110 | for c in candidate[1:]:
111 | for i in range(len(completed_candidate)):
112 | if i < len(c) and completed_candidate[i] != c[i]:
113 | completed_candidate = completed_candidate[0:i]
114 | break
115 | cs.scope["filter_string"] += completed_candidate[len(completed_string):]
116 | else:
117 | completed_candidate = candidate[0]
118 | cs.scope["filter_string"] += completed_candidate[len(completed_string):] + " "
119 | input = renpy.get_displayable("_image_selecter", "input_filter_strings")
120 | input.caret_pos = len(cs.scope["filter_string"])
121 |
122 | def _image_viewer_hide():
123 | renpy.hide("preview", layer="screens")
124 | renpy.restart_interaction()
125 |
126 | init -1 python in _viewers:
127 | @renpy.pure
128 | class ShowImage(renpy.store.Action, renpy.store.DictEquality):
129 | def __init__(self, image_name_tuple):
130 | self.string = " ".join(image_name_tuple)
131 | self.check = None
132 |
133 | def __call__(self):
134 | if self.check is None:
135 | for n in get_image_name_candidates():
136 | if set(n) == set(self.string.split()) and n[0] == self.string.split()[0]:
137 | self.string = " ".join(n)
138 | try:
139 | for fn in renpy.display.image.images[n].predict_files():
140 | if not renpy.loader.loadable(fn):
141 | self.check = False
142 | break
143 | else:
144 | self.check = True
145 | except:
146 | self.check = True #text displayable or Live2D
147 | try:
148 | if self.check:
149 | renpy.show(self.string, at_list=[renpy.store.truecenter], layer="screens", tag="preview")
150 | else:
151 | renpy.show("preview", what=renpy.text.text.Text("No files", color="#F00"), at_list=[renpy.store.truecenter], layer="screens")
152 | except:
153 | renpy.show("preview", what=renpy.text.text.Text("No files", color="#F00"), at_list=[renpy.store.truecenter], layer="screens")
154 | renpy.restart_interaction()
155 |
156 |
157 | @renpy.pure
158 | class Add_tag_or_Return(renpy.store.Action, renpy.store.DictEquality):
159 | def __init__(self, image_name_tuple):
160 | self.image_name_tuple = image_name_tuple
161 | self.string = " ".join(image_name_tuple)
162 | self.check = None
163 |
164 | def __call__(self):
165 | if self.check is None:
166 | for n in get_image_name_candidates():
167 | if set(n) == set(self.string.split()) and n[0] == self.string.split()[0]:
168 | self.string = " ".join(n)
169 | try:
170 | for fn in renpy.display.image.images[n].predict_files():
171 | if not renpy.loader.loadable(fn):
172 | self.check = False
173 | break
174 | else:
175 | self.check = True
176 | except:
177 | self.check = False #text displayable or Live2D
178 | if self.check:
179 | if in_editor:
180 | return self.image_name_tuple
181 | else:
182 | put_clipboard_text(self.string)
183 |
184 | else:
185 | cs = renpy.current_screen()
186 | cs.scope["filter_string"] = self.string + " "
187 | input = renpy.get_displayable("_image_selecter", "input_filter_strings")
188 | input.caret_pos = len(cs.scope["filter_string"])
189 | renpy.restart_interaction()
190 |
--------------------------------------------------------------------------------
/keymap.rpy:
--------------------------------------------------------------------------------
1 | init 999 python:
2 | config.locked = False
3 | if _viewers.check_version(23060707):
4 | config.keymap["action_editor"] = ['shift_K_p']
5 | config.keymap["image_viewer"] = ['shift_K_u']
6 | config.keymap["sound_viewer"] = ['shift_K_s']
7 | else:
8 | config.keymap["action_editor"] = ['P']
9 | config.keymap["image_viewer"] = ['U']
10 | config.keymap["sound_viewer"] = ['S']
11 | config.locked = True
12 |
--------------------------------------------------------------------------------
/menu_screen.rpy:
--------------------------------------------------------------------------------
1 | init python:
2 |
3 | @renpy.pure
4 | class ShowAlternateMenu(Action, DictEquality):
5 | """
6 | :doc: menu_action
7 |
8 | Show alternate menu screen at the bottom right corner of the cursor.
9 | That screen can include textbuttons.
10 |
11 | `button_list`
12 | The list of tuple which has two elements. first is a string used
13 | as text for textbutton and second is action.
14 | `menu_width`
15 | If the x-coordinate of the cursor plus this number is greater than
16 | :var:`config.scren_witdth`, the menu will be displayed to the left
17 | of the cursor. default is 300
18 | `menu_height`
19 | If the y-coordinate of the cursor plus this number is greater than
20 | :var:`config.scren_witdth`, the menu will be displayed to the upper
21 | of the cursor. default is 300
22 | `style_prefix`
23 | If not None, this is used for menu screen as style_prefix.
24 |
25 | """
26 | def __init__(self, button_list, menu_width=300, menu_height=200, style_prefix=None):
27 | self.button_list = button_list
28 | self.style_prefix = style_prefix
29 | self.menu_width = menu_width
30 | self.menu_height = menu_height
31 |
32 | def predict(self):
33 | renpy.predict_screen("_alternate_menu", self.button_list,
34 | menu_width=self.menu_width, menu_height=self.menu_height, style_prefix=self.style_prefix, _transient=True)
35 |
36 | def __call__(self):
37 |
38 | renpy.show_screen("_alternate_menu", self.button_list,
39 | menu_width=self.menu_width, menu_height=self.menu_height, style_prefix=self.style_prefix, _transient=True)
40 | renpy.restart_interaction()
41 |
42 |
43 | init -999:
44 | $_alternate_menu_pos = None
45 | screen _alternate_menu(button_list, menu_width=300, menu_height=200, style_prefix=None):
46 | key ["game_menu", "dismiss"] action [Hide("_alternate_menu"), SetVariable("_alternate_menu_pos", None)]
47 | modal True
48 |
49 | if _alternate_menu_pos is None:
50 | $_alternate_menu_pos = renpy.get_mouse_pos()
51 | $(x, y) = _alternate_menu_pos
52 |
53 | frame:
54 | if style_prefix:
55 | style_prefix style_prefix
56 | pos (x, y)
57 | if x + menu_width > config.screen_width:
58 | xanchor 1.0
59 | else:
60 | xanchor 0.0
61 | if y + menu_height > config.screen_height:
62 | yanchor 1.0
63 | else:
64 | yanchor 0.0
65 | vbox:
66 | xfill False
67 | for text, action in button_list:
68 | if not isinstance(action, list):
69 | $action = [action]
70 | textbutton text action action+[Hide("_alternate_menu"), SetVariable("_alternate_menu_pos", None)]
71 |
--------------------------------------------------------------------------------
/sound_viewer.rpy:
--------------------------------------------------------------------------------
1 | #Sound Viewer
2 | #Open by shift + S
3 | #The files in only game/audio/**/* is shown
4 |
5 | screen _sound_selector(default=""):
6 | default filter_string = default
7 | key "game_menu" action Return("")
8 | on "hide" action Stop("music")
9 | zorder 20
10 | frame:
11 | style_group "sound_selecter"
12 | vbox:
13 | label _("type filenames(ex: variable, '' or [[variable, variable])") style "sound_selecter_input"
14 | label _("Tab: completion") style "sound_selecter_input"
15 | input value ScreenVariableInputValue("filter_string", default=True, returnable=True) copypaste True style "sound_selecter_input" id "input_filter_strings"
16 | $filtered_list = _viewers.filter_sound_name(filter_string)
17 | viewport:
18 | mousewheel True
19 | scrollbars "vertical"
20 | vbox:
21 | for sound_name in filtered_list:
22 | if "<" not in sound_name:
23 | $file = renpy.python.store_dicts["store.audio"].get(sound_name)
24 | else:
25 | $file = ""
26 | textbutton sound_name action Function(_viewers.return_sound, filter_string, sound_name) hovered Play("music", file) unhovered Stop("music")
27 | textbutton _("clipboard") action [SensitiveIf(filter_string), Function(_viewers.put_clipboard_text, filter_string)] xalign 1.0 idle_background None insensitive_background None
28 | key "K_TAB" action Function(_viewers.completion, filter_string, filtered_list)
29 |
30 | init python:
31 | import re
32 |
33 | def audio_list(dir=""):
34 | list = renpy.list_files()
35 | ext = [ ".aac", ".flac", ".mp2", ".mp3", ".ogg", ".opus", ".wav", ".weba"]
36 | for f in list:
37 | if re.match(dir,f):
38 | if f.lower().endswith(tuple(ext)):
39 | if not renpy.python.store_dicts["store.audio"].get("\""+str(f[(len(dir)):])+"\""):
40 | renpy.python.store_dicts["store.audio"]["\""+str(f[(len(dir)):])+"\""] = str(f[(len(dir)):])
41 | return
42 |
43 | # Load all audio into Store.Audio
44 | audio_list()
45 |
46 | init:
47 | style sound_selecter_frame:
48 | background "#0006"
49 | yfill True
50 | style sound_selecter_viewport:
51 | ymaximum 600
52 | style sound_selecter_input:
53 | outlines [ (absolute(1), "#000", absolute(0), absolute(0)) ]
54 | style sound_selecter_button:
55 | size_group "sound_selecter"
56 | idle_background None
57 | style sound_selecter_button_text:
58 | color "#CCC"
59 | hover_underline True
60 | selected_color "#FFF"
61 | insensitive_color "#888"
62 | outlines [ (absolute(1), "#000", absolute(0), absolute(0)) ]
63 | xalign .0
64 |
65 | init -999 python in _viewers:
66 | def open_sound_viewer():
67 | if not renpy.config.developer:
68 | return
69 | _skipping_org = renpy.store._skipping
70 | renpy.store._skipping = False
71 | renpy.invoke_in_new_context(renpy.call_screen, "_sound_selector")
72 | renpy.store._skipping = _skipping_org
73 |
74 | def filter_sound_name(filter_string):
75 | filtered_list = []
76 | if "," in filter_string:
77 | last_element = filter_string[filter_string.rfind(",")+1:].strip()
78 | elif "[" in filter_string: #]"
79 | last_element = filter_string[1:]
80 | else:
81 | last_element = filter_string
82 | if "<" in last_element:
83 | filtered_list.append(" 1:
116 | completed_candidate = candidate[0]
117 | for c in candidate[1:]:
118 | for i in range(len(completed_candidate)):
119 | if i < len(c) and completed_candidate[i] != c[i]:
120 | completed_candidate = completed_candidate[0:i]
121 | break
122 | else:
123 | completed_candidate = candidate[0]
124 | cs = renpy.current_screen()
125 | cs.scope["filter_string"] += completed_candidate[len(last_element):]
126 | input = renpy.get_displayable("_sound_selector", "input_filter_strings")
127 | input.caret_pos = len(cs.scope["filter_string"])
128 |
129 |
130 | def return_sound(filter_string, sound_name):
131 | if not in_editor:
132 | put_clipboard_text(sound_name)
133 | else:
134 | if "," in filter_string:
135 | prefix = "["
136 | other_element = filter_string[:filter_string.rfind(",")+1]
137 | if "[" in other_element:
138 | other_element = other_element[1:]
139 | last_element = filter_string[filter_string.rfind(",")+1:]
140 | suffix = "]"
141 | elif "[" in filter_string: #]"
142 | prefix = "["
143 | other_element = ""
144 | last_element = filter_string[1:]
145 | suffix = "]"
146 | else:
147 | prefix = "["
148 | last_element = filter_string
149 | other_element = ""
150 | suffix = "]"
151 | return prefix + other_element + sound_name + suffix
152 |
--------------------------------------------------------------------------------
/tl/chinese/ActionEditor.rpy:
--------------------------------------------------------------------------------
1 | # TODO: Translation updated at 2022-05-04 16:37
2 |
3 | translate chinese strings:
4 | # game/ActionEditor.rpy:269
5 | old "can't change values before the start tiem of the current scene"
6 | new "在当前场景开始前的数值无法更改"
7 |
8 | # game/ActionEditor.rpy:966
9 | old "Please type value"
10 | new "请输入数值"
11 |
12 | # game/ActionEditor.rpy:974
13 | old "Please type plus value"
14 | new "请输入正值"
15 |
16 | # game/ActionEditor.rpy:986
17 | old "Please Input Transition"
18 | new "请输入转场效果"
19 |
20 | # game/ActionEditor.rpy:1031
21 | old "Please type the list of channel names(ex ['sound', 'sound2'])"
22 | new "请输入音频频道名称列表(例如 ['sound', 'sound2'])"
23 |
24 | # game/ActionEditor.rpy:1044
25 | old "can't include audio channel"
26 | new "无法包含Audio频道"
27 |
28 | # game/ActionEditor.rpy:1079
29 | old "too many same tag images is used"
30 | new "使用了过多相同标签的图像"
31 |
32 | # game/ActionEditor.rpy:1102
33 | old "Please type image name"
34 | new "请输入图像名称"
35 |
36 | # game/ActionEditor.rpy:1179
37 | old "Please type a valid data"
38 | new "请输入有效数据"
39 |
40 | # game/ActionEditor.rpy:1382
41 | old "Can't open clipboard"
42 | new "无法打开剪贴板"
43 |
44 | # game/ActionEditor.rpy:1387
45 | old "Placed \n\"%s\"\n on clipboard"
46 | new "已将\n\"%s\"\n放置在剪贴板上"
47 |
48 | # game/ActionEditor.rpy:1566
49 | old "Please type float value"
50 | new "请输入浮点值"
51 |
52 | # game/ActionEditor.rpy:1568
53 | old "Please type int value"
54 | new "请输入整数值"
55 |
56 | # game/ActionEditor.rpy:1798
57 | old "This channel is already used in this time"
58 | new "此音频频道已被使用"
59 |
60 | # game/ActionEditor.rpy:1815
61 | old "Please Input filenames"
62 | new "请输入文件名"
63 |
64 | # game/ActionEditor.rpy:2888
65 | old "Can't open clip board"
66 | new "无法打开剪贴板"
67 |
68 | # game/ActionEditor.rpy:2896
69 | old "Nothing to put"
70 | new "没有要放置的内容"
71 |
72 | # game/ActionEditor.rpy:978
73 | old "Type transition"
74 | new "请输入过渡效果"
75 |
76 | # game/ActionEditor.rpy:1030
77 | old "Please type the list of channel names(ex [['sound', 'sound2'])"
78 | new "请输入音频频道名称列表(例如 ['sound', 'sound2'])"
79 |
80 | # game/ActionEditor.rpy:1640
81 | old "the new scene must be later than the start time of the previous scene."
82 | new "新场景必须在前一场景的开始时间之后。"
--------------------------------------------------------------------------------
/tl/chinese/ActionEditor_screens.rpy:
--------------------------------------------------------------------------------
1 | # TODO: Translation updated at 2022-05-04 16:37
2 |
3 | translate chinese strings:
4 | # game/ActionEditor_screens.rpy:114
5 | old "option"
6 | new "选项"
7 |
8 | # game/ActionEditor_screens.rpy:115
9 | old "show image pins"
10 | new "显示图像定位点"
11 |
12 | # game/ActionEditor_screens.rpy:116
13 | old "scene editor"
14 | new "场景编辑器"
15 |
16 | # game/ActionEditor_screens.rpy:119
17 | old "remove keys"
18 | new "删除关键帧"
19 |
20 | # game/ActionEditor_screens.rpy:122
21 | old "move keys"
22 | new "移动关键帧"
23 |
24 | # game/ActionEditor_screens.rpy:129
25 | old "play"
26 | new "播放"
27 |
28 | # game/ActionEditor_screens.rpy:130
29 | old "clipboard"
30 | new "剪贴板"
31 |
32 | # game/ActionEditor_screens.rpy:131
33 | old "close"
34 | new "关闭"
35 |
36 | # game/ActionEditor_screens.rpy:464
37 | old "+(add scene)"
38 | new "+(添加场景)"
39 |
40 | # game/ActionEditor_screens.rpy:698
41 | old "time: [current_time:>05.2f] s"
42 | new "时间: [current_time:>05.2f] 秒"
43 |
44 | # game/ActionEditor_screens.rpy:707
45 | old "remove keyframes"
46 | new "删除关键帧"
47 |
48 | # game/ActionEditor_screens.rpy:710
49 | old "move keyframes"
50 | new "移动关键帧"
51 |
52 | # game/ActionEditor_screens.rpy:713
53 | old "hide"
54 | new "隐藏"
55 |
56 | # game/ActionEditor_screens.rpy:715
57 | old "x"
58 | new "x"
59 |
60 | # game/ActionEditor_screens.rpy:718
61 | old "scene"
62 | new "场景"
63 |
64 | # game/ActionEditor_screens.rpy:721
65 | old "+"
66 | new "+"
67 |
68 | # game/ActionEditor_screens.rpy:727
69 | old "camera"
70 | new "摄像机"
71 |
72 | # game/ActionEditor_screens.rpy:875
73 | old "remove"
74 | new "删除"
75 |
76 | # game/ActionEditor_screens.rpy:952
77 | old "Use Legacy ActionEditor Screen(recommend legacy gui for the 4:3 or small window)"
78 | new "使用经典编辑界面(建议在4:3或小窗口下使用传统GUI)"
79 |
80 | # game/ActionEditor_screens.rpy:953
81 | old "legacy gui"
82 | new "经典GUI"
83 |
84 | # game/ActionEditor_screens.rpy:954
85 | old "Show/Hide rule of thirds lines"
86 | new "显示/隐藏辅助线"
87 |
88 | # game/ActionEditor_screens.rpy:955
89 | old "show rot"
90 | new "显示旋转"
91 |
92 | # game/ActionEditor_screens.rpy:956
93 | old "Show/Hide window during animation in clipboard(window is forced to be hide when the action has multi scene)"
94 | new "在剪贴板中的动画期间显示/隐藏对话框(当动作包含多个场景时,窗口将被强制隐藏)"
95 |
96 | # game/ActionEditor_screens.rpy:957
97 | old "hide window"
98 | new "隐藏对话框"
99 |
100 | # game/ActionEditor_screens.rpy:958
101 | old "Allow/Disallow skipping animation in clipboard(be forced to allow when the action has multi scene)"
102 | new "在剪贴板中允许/禁止跳过动画(当动作包含多个场景时,将强制允许)"
103 |
104 | # game/ActionEditor_screens.rpy:959
105 | old "(*This doesn't work correctly when the animation include loops and that tag is already shown)"
106 | new "(*当动画包含循环并且标签已经显示时,此功能不起作用)"
107 |
108 | # game/ActionEditor_screens.rpy:960
109 | old "skippable"
110 | new "可跳过"
111 |
112 | # game/ActionEditor_screens.rpy:961
113 | old "Enable/Disable simulating camera blur(This is available when perspective is True)"
114 | new "启用/禁用模拟相机模糊效果(仅在透视为True时有效)"
115 |
116 | # game/ActionEditor_screens.rpy:962
117 | old "focusing"
118 | new "聚焦"
119 |
120 | # game/ActionEditor_screens.rpy:963
121 | old "One line includes only one property in clipboard data"
122 | new "在剪贴板数据中,属性分行编写"
123 |
124 | # game/ActionEditor_screens.rpy:964
125 | old "one_line_one_property"
126 | new "一行一个参数"
127 |
128 | # game/ActionEditor_screens.rpy:965
129 | old "Assign default warper"
130 | new "分配默认变形器"
131 |
132 | # game/ActionEditor_screens.rpy:967
133 | old "Assign default transition(example: dissolve, Dissolve(5), None)"
134 | new "分配默认过渡效果(示例: dissolve, Dissolve(5), None)"
135 |
136 | # game/ActionEditor_screens.rpy:969
137 | old "the time range of property bar(type float)"
138 | new "属性栏的时间范围(浮点数)"
139 |
140 | # game/ActionEditor_screens.rpy:971
141 | old "Show/Hide camera and image icon"
142 | new "显示/隐藏相机和图像图标"
143 |
144 | # game/ActionEditor_screens.rpy:972
145 | old "show icon"
146 | new "显示图标"
147 |
148 | # game/ActionEditor_screens.rpy:974
149 | old "following options have effect for only New GUI"
150 | new "以下选项仅对新 GUI 有效"
151 |
152 | # game/ActionEditor_screens.rpy:975
153 | old "Open only one page at once"
154 | new "一次只打开一页"
155 |
156 | # game/ActionEditor_screens.rpy:976
157 | old "open only one page"
158 | new "一次只打开一页"
159 |
160 | # game/ActionEditor_screens.rpy:977
161 | old "Set the amount of change per pixel when dragging the value of the integer property"
162 | new "拖动整数属性值时每像素的变化量"
163 |
164 | # game/ActionEditor_screens.rpy:979
165 | old "Set the amount of change per pixel when dragging the value of the float property"
166 | new "拖动浮点属性值时每像素的变化量"
167 |
168 | # game/ActionEditor_screens.rpy:981
169 | old "Set the list of channels for playing in ActionEditor"
170 | new "设置在编辑器中播放的音频通道列表"
171 |
172 | # game/ActionEditor_screens.rpy:983
173 | old "the wide range of property in Graphic Editor(type int)"
174 | new "图形编辑器中属性的广泛范围(整数)"
175 |
176 | # game/ActionEditor_screens.rpy:985
177 | old "the narrow range of property in Graphic Editor(type float)"
178 | new "图形编辑器中属性的狭窄范围(浮点数)"
179 |
180 | # game/ActionEditor_screens.rpy:988
181 | old "following options have effect for only Legacy GUI"
182 | new "以下选项仅对经典 GUI 有效"
183 |
184 | # game/ActionEditor_screens.rpy:989
185 | old "the wide range of property bar which is mainly used for int values(type int)"
186 | new "主要用于整数值的属性栏的广泛范围(整数)"
187 |
188 | # game/ActionEditor_screens.rpy:991
189 | old "the narrow range of property bar which is used for float values(type float)"
190 | new "主要用于浮点值的属性栏的狭窄范围(浮点数)"
191 |
192 | # game/ActionEditor_screens.rpy:1006
193 | old "Select a warper function"
194 | new "选择变形器功能"
195 |
196 | # game/ActionEditor_screens.rpy:1017
197 | old "add"
198 | new "添加"
199 |
200 | # game/ActionEditor_screens.rpy:1045
201 | old "time: [_viewers.moved_time:>.2f] s"
202 | new "时间: [_viewers.moved_time:>.2f] 秒"
203 |
204 | # game/ActionEditor_screens.rpy:1080
205 | old "KeyFrames"
206 | new "关键帧"
207 |
208 | # game/ActionEditor_screens.rpy:1092
209 | old "spline"
210 | new "样条"
211 |
212 | # game/ActionEditor_screens.rpy:1096
213 | old "[t:>05.2f] s"
214 | new "[t:>05.2f] 秒"
215 |
216 | # game/ActionEditor_screens.rpy:1119
217 | old "loop"
218 | new "循环"
219 |
220 | # game/ActionEditor_screens.rpy:1144
221 | old "spline_editor"
222 | new "样条编辑器"
223 |
224 | # game/ActionEditor_screens.rpy:1185
225 | old "scene_editor"
226 | new "场景编辑器"
227 |
228 | # game/ActionEditor_screens.rpy:1366
229 | old "time: {:>05.2f} s"
230 | new "时间: {:>05.2f} 秒"
231 |
232 | # game/ActionEditor_screens.rpy:3097
233 | old "open warper selecter: warper_generator"
234 | new "打开变形器选择器: warper_generator"
235 |
236 | # game/ActionEditor_screens.rpy:3103
237 | old "use warper generator"
238 | new "使用变形器生成器"
239 |
240 | # game/ActionEditor_screens.rpy:3107
241 | old "spline editor"
242 | new "样条编辑器"
243 |
244 | # game/ActionEditor_screens.rpy:3118
245 | old "toggle graphic editor"
246 | new "切换图形编辑器"
247 |
248 | # game/ActionEditor_screens.rpy:3119
249 | old "reset"
250 | new "重置"
251 |
252 | # game/ActionEditor_screens.rpy:3124
253 | old "toggle loop"
254 | new "切换循环"
255 |
256 | # game/ActionEditor_screens.rpy:926
257 | old "type value"
258 | new "输入数值"
--------------------------------------------------------------------------------
/tl/chinese/image_viewer.rpy:
--------------------------------------------------------------------------------
1 | # TODO: Translation updated at 2022-05-04 16:37
2 |
3 | translate chinese strings:
4 |
5 | # game/image_viewer.rpy:13
6 | old "Type a image name"
7 | new "请输入图像名"
8 |
9 |
--------------------------------------------------------------------------------
/tl/chinese/sound_viewer.rpy:
--------------------------------------------------------------------------------
1 | # TODO: Translation updated at 2022-05-04 16:37
2 |
3 | translate chinese strings:
4 |
5 | # game/sound_viewer.rpy:13
6 | old "type filenames(ex: variable, '' or [[variable, variable])"
7 | new "请输入文件名(如:变量,''或[[变量名, 变量名])"
8 |
9 |
--------------------------------------------------------------------------------
/tl/japanese/ActionEditor.rpy:
--------------------------------------------------------------------------------
1 | # TODO: Translation updated at 2022-05-04 16:37
2 |
3 | translate japanese strings:
4 |
5 | # game/ActionEditor.rpy:269
6 | old "can't change values before the start tiem of the current scene"
7 | new "現在のシーン開始前の値は変更できません"
8 |
9 | # game/ActionEditor.rpy:966
10 | old "Please type value"
11 | new "値を入力してください"
12 |
13 | # game/ActionEditor.rpy:974
14 | old "Please type plus value"
15 | new "正の値を入力してください"
16 |
17 | # game/ActionEditor.rpy:986
18 | old "Please Input Transition"
19 | new "トランジションを入力してください"
20 |
21 | # game/ActionEditor.rpy:1031
22 | old "Please type the list of channel names(ex ['sound', 'sound2'])"
23 | new "チャンネル名のリストを入力してください(例 ['sound', 'sound2'])"
24 |
25 | # game/ActionEditor.rpy:1044
26 | old "can't include audio channel"
27 | new "オーディオチャンネルは含められません"
28 |
29 | # game/ActionEditor.rpy:1079
30 | old "too many same tag images is used"
31 | new "多すぎる同じタグの画像が使用されています"
32 |
33 | # game/ActionEditor.rpy:1102
34 | old "Please type image name"
35 | new "画像名を入力してください"
36 |
37 | # game/ActionEditor.rpy:1179
38 | old "Please type a valid data"
39 | new "適切な値を入力してください"
40 |
41 | # game/ActionEditor.rpy:1382
42 | old "Can't open clipboard"
43 | new "クリップボードを開けません"
44 |
45 | # game/ActionEditor.rpy:1387
46 | old "Placed \n\"%s\"\n on clipboard"
47 | new "次のデータをクリップボードに出力しました\n\"%s\""
48 |
49 | # game/ActionEditor.rpy:1566
50 | old "Please type float value"
51 | new "浮動小数を入力してください"
52 |
53 | # game/ActionEditor.rpy:1568
54 | old "Please type int value"
55 | new "整数を入力してください"
56 |
57 | # game/ActionEditor.rpy:1798
58 | old "This channel is already used in this time"
59 | new "このチャンネルはこの時間すでに使用されています"
60 |
61 | # game/ActionEditor.rpy:1815
62 | old "Please Input filenames"
63 | new "ファイル名を入力してください。"
64 |
65 | # game/ActionEditor.rpy:2888
66 | old "Can't open clip board"
67 | new "クリップボードを開けません"
68 |
69 | # game/ActionEditor.rpy:2896
70 | old "Nothing to put"
71 | new "出力するものがありません"
72 |
73 | # game/ActionEditor.rpy:978
74 | old "Type transition"
75 | new "トランジションを入力してください"
76 |
77 | # game/ActionEditor.rpy:1030
78 | old "Please type the list of channel names(ex [['sound', 'sound2'])"
79 | new "チャンネル名のリストを入力してください(例 ['sound', 'sound2'])"
80 |
81 | # game/ActionEditor.rpy:1640
82 | old "the new scene must be later than the start time of the previous scene."
83 | new "新規シーンは以前のシーン開始より後であるべきです。"
84 |
85 |
--------------------------------------------------------------------------------
/tl/japanese/ActionEditor_screens.rpy:
--------------------------------------------------------------------------------
1 | # TODO: Translation updated at 2022-05-04 16:37
2 |
3 | translate japanese strings:
4 |
5 | # game/ActionEditor_screens.rpy:114
6 | old "option"
7 | new "option"
8 |
9 | # game/ActionEditor_screens.rpy:115
10 | old "show image pins"
11 | new "show image pins"
12 |
13 | # game/ActionEditor_screens.rpy:116
14 | old "scene editor"
15 | new "scene editor"
16 |
17 | # game/ActionEditor_screens.rpy:119
18 | old "remove keys"
19 | new "remove keys"
20 |
21 | # game/ActionEditor_screens.rpy:122
22 | old "move keys"
23 | new "move keys"
24 |
25 | # game/ActionEditor_screens.rpy:129
26 | old "play"
27 | new "play"
28 |
29 | # game/ActionEditor_screens.rpy:130
30 | old "clipboard"
31 | new "clipboard"
32 |
33 | # game/ActionEditor_screens.rpy:131
34 | old "close"
35 | new "close"
36 |
37 | # game/ActionEditor_screens.rpy:464
38 | old "+(add scene)"
39 | new "+(add scene)"
40 |
41 | # game/ActionEditor_screens.rpy:698
42 | old "time: [current_time:>05.2f] s"
43 | new "time: [current_time:>05.2f] s"
44 |
45 | # game/ActionEditor_screens.rpy:707
46 | old "remove keyframes"
47 | new "remove keyframes"
48 |
49 | # game/ActionEditor_screens.rpy:710
50 | old "move keyframes"
51 | new "move keyframes"
52 |
53 | # game/ActionEditor_screens.rpy:713
54 | old "hide"
55 | new "hide"
56 |
57 | # game/ActionEditor_screens.rpy:715
58 | old "x"
59 | new "x"
60 |
61 | # game/ActionEditor_screens.rpy:718
62 | old "scene"
63 | new "scene"
64 |
65 | # game/ActionEditor_screens.rpy:721
66 | old "+"
67 | new "+"
68 |
69 | # game/ActionEditor_screens.rpy:727
70 | old "camera"
71 | new "camera"
72 |
73 | # game/ActionEditor_screens.rpy:875
74 | old "remove"
75 | new "remove"
76 |
77 | # game/ActionEditor_screens.rpy:952
78 | old "Use Legacy ActionEditor Screen(recommend legacy gui for the 4:3 or small window)"
79 | new "レガシーGUIを使用するか(4:3や小さなウィンドウではレガシーGUIを推奨します)"
80 |
81 | # game/ActionEditor_screens.rpy:953
82 | old "legacy gui"
83 | new "legacy gui"
84 |
85 | # game/ActionEditor_screens.rpy:954
86 | old "Show/Hide rule of thirds lines"
87 | new "三分割法の補助線を表示するか"
88 |
89 | # game/ActionEditor_screens.rpy:955
90 | old "show rot"
91 | new "show rot"
92 |
93 | # game/ActionEditor_screens.rpy:956
94 | old "Show/Hide window during animation in clipboard(window is forced to be hide when the action has multi scene)"
95 | new "アニメーション中はウィンドウを非表示するフォーマットでクリップボードに出力するか(シーンが複数ある場合常に非表示になります)"
96 |
97 | # game/ActionEditor_screens.rpy:957
98 | old "hide window"
99 | new "hide window"
100 |
101 | # game/ActionEditor_screens.rpy:958
102 | old "Allow/Disallow skipping animation in clipboard(be forced to allow when the action has multi scene)"
103 | new "アニメーションをスキップできる形式でクリップボードに出力するか(シーンが複数ある場合常にスキップ可になります)"
104 |
105 | # game/ActionEditor_screens.rpy:959
106 | old "(*This doesn't work correctly when the animation include loops and that tag is already shown)"
107 | new "(アニメーションにループがある場合やタグがすでに表示されている場合、これは正常に動作しません)"
108 |
109 | # game/ActionEditor_screens.rpy:960
110 | old "skippable"
111 | new "skippable"
112 |
113 | # game/ActionEditor_screens.rpy:961
114 | old "Enable/Disable simulating camera blur(This is available when perspective is True)"
115 | new "カメラブラーのシミュレーションを使用するか(perspective が True のときのみ有効です)"
116 |
117 | # game/ActionEditor_screens.rpy:962
118 | old "focusing"
119 | new "focusing"
120 |
121 | # game/ActionEditor_screens.rpy:963
122 | old "One line includes only one property in clipboard data"
123 | new "クリップボードのフォーマットとを1行で1つのプロパティーのみ変更するようにする"
124 |
125 | # game/ActionEditor_screens.rpy:964
126 | old "one_line_one_property"
127 | new "one_line_one_property"
128 |
129 | # game/ActionEditor_screens.rpy:965
130 | old "Assign default warper"
131 | new "デフォルトワーパーの設定"
132 |
133 | # game/ActionEditor_screens.rpy:967
134 | old "Assign default transition(example: dissolve, Dissolve(5), None)"
135 | new "デフォルトトランジションの設定(例:dissolve, Dissolve(5), None)"
136 |
137 | # game/ActionEditor_screens.rpy:969
138 | old "the time range of property bar(type float)"
139 | new "バーに表示する時間(浮動小数)"
140 |
141 | # game/ActionEditor_screens.rpy:971
142 | old "Show/Hide camera and image icon"
143 | new "カメラと画像の位置を操作するアイコンを表示"
144 |
145 | # game/ActionEditor_screens.rpy:972
146 | old "show icon"
147 | new "show icon"
148 |
149 | # game/ActionEditor_screens.rpy:974
150 | old "following options have effect for only New GUI"
151 | new "次のオプションはレガシーGUIに影響しません"
152 |
153 | # game/ActionEditor_screens.rpy:975
154 | old "Open only one page at once"
155 | new "一度に開けるのを一つのページのみにするか"
156 |
157 | # game/ActionEditor_screens.rpy:976
158 | old "open only one page"
159 | new "open only one page"
160 |
161 | # game/ActionEditor_screens.rpy:977
162 | old "Set the amount of change per pixel when dragging the value of the integer property"
163 | new "整数のプロパティーの値をドラッグしたときの1ピクセルごとの変化量"
164 |
165 | # game/ActionEditor_screens.rpy:979
166 | old "Set the amount of change per pixel when dragging the value of the float property"
167 | new "浮動小数のプロパティーの値をドラッグしたときの1ピクセルごとの変化量"
168 |
169 | # game/ActionEditor_screens.rpy:981
170 | old "Set the list of channels for playing in ActionEditor"
171 | new "ActionEditorで再生するチャンネルのリスト"
172 |
173 | # game/ActionEditor_screens.rpy:983
174 | old "the wide range of property in Graphic Editor(type int)"
175 | new "Graphic Editorで表示するプロパティー整数値のスケール(整数)"
176 |
177 | # game/ActionEditor_screens.rpy:985
178 | old "the narrow range of property in Graphic Editor(type float)"
179 | new "Graphic Editorで表示するプロパティー浮動小数値のスケール(浮動小数)"
180 |
181 | # game/ActionEditor_screens.rpy:988
182 | old "following options have effect for only Legacy GUI"
183 | new "次のオプションはレガシーGUIにのみ影響します"
184 |
185 | # game/ActionEditor_screens.rpy:989
186 | old "the wide range of property bar which is mainly used for int values(type int)"
187 | new "主に整数で使用されるプロパティーバーのスケール(整数)"
188 |
189 | # game/ActionEditor_screens.rpy:991
190 | old "the narrow range of property bar which is used for float values(type float)"
191 | new "主に浮動小数で使用されるプロパティーバーのスケール(浮動小数)"
192 |
193 | # game/ActionEditor_screens.rpy:1006
194 | old "Select a warper function"
195 | new "ワーパー関数の選択"
196 |
197 | # game/ActionEditor_screens.rpy:1017
198 | old "add"
199 | new "add"
200 |
201 | # game/ActionEditor_screens.rpy:1045
202 | old "time: [_viewers.moved_time:>.2f] s"
203 | new "time: [_viewers.moved_time:>.2f] s"
204 |
205 | # game/ActionEditor_screens.rpy:1080
206 | old "KeyFrames"
207 | new "KeyFrames"
208 |
209 | # game/ActionEditor_screens.rpy:1092
210 | old "spline"
211 | new "spline"
212 |
213 | # game/ActionEditor_screens.rpy:1096
214 | old "[t:>05.2f] s"
215 | new "[t:>05.2f] s"
216 |
217 | # game/ActionEditor_screens.rpy:1119
218 | old "loop"
219 | new "loop"
220 |
221 | # game/ActionEditor_screens.rpy:1144
222 | old "spline_editor"
223 | new "spline_editor"
224 |
225 | # game/ActionEditor_screens.rpy:1185
226 | old "scene_editor"
227 | new "scene_editor"
228 |
229 | # game/ActionEditor_screens.rpy:1366
230 | old "time: {:>05.2f} s"
231 | new "time: {:>05.2f} s"
232 |
233 | # game/ActionEditor_screens.rpy:3097
234 | old "open warper selecter: warper_generator"
235 | new "open warper selecter: warper_generator"
236 |
237 | # game/ActionEditor_screens.rpy:3103
238 | old "use warper generator"
239 | new "use warper generator"
240 |
241 | # game/ActionEditor_screens.rpy:3107
242 | old "spline editor"
243 | new "spline editor"
244 |
245 | # game/ActionEditor_screens.rpy:3118
246 | old "toggle graphic editor"
247 | new "toggle graphic editor"
248 |
249 | # game/ActionEditor_screens.rpy:3119
250 | old "reset"
251 | new "reset"
252 |
253 | # game/ActionEditor_screens.rpy:3124
254 | old "toggle loop"
255 | new "toggle loop"
256 |
257 |
258 | # game/ActionEditor_screens.rpy:926
259 | old "type value"
260 | new "値を入力してください"
261 |
262 |
--------------------------------------------------------------------------------
/tl/japanese/image_viewer.rpy:
--------------------------------------------------------------------------------
1 | # TODO: Translation updated at 2022-05-04 16:37
2 |
3 | translate japanese strings:
4 |
5 | # game/image_viewer.rpy:13
6 | old "Type a image name"
7 | new "画像名を入力してください"
8 |
9 |
--------------------------------------------------------------------------------
/tl/japanese/sound_viewer.rpy:
--------------------------------------------------------------------------------
1 | # TODO: Translation updated at 2022-05-04 16:37
2 |
3 | translate japanese strings:
4 |
5 | # game/sound_viewer.rpy:13
6 | old "type filenames(ex: variable, '' or [[variable, variable])"
7 | new "ファイル名を入力してください(例: 変数名 または '' [[変数名, 変数名])"
8 |
9 |
--------------------------------------------------------------------------------