ver 6.14.1
チャプターごとにゲームを開始できるようにする
↑
書いてある通りです(・ω・)以上!
screens.rpy の中にある main_menu のあたりを探してメニュー項目を追加するだけ!
textbutton _("Start Chapter 2") action Start("chapter2")
action Start の引数にラベル名を入れる。空の場合はゲームの先頭から開始になる。
開発中はショートカット代わりに作っても便利ヾ(・ω・)ノ
ver 6.14.1
チャプターごとにゲームを開始できるようにする
↑
書いてある通りです(・ω・)以上!
screens.rpy の中にある main_menu のあたりを探してメニュー項目を追加するだけ!
textbutton _("Start Chapter 2") action Start("chapter2")
action Start の引数にラベル名を入れる。空の場合はゲームの先頭から開始になる。
開発中はショートカット代わりに作っても便利ヾ(・ω・)ノ
ver 6.14.1
How do I put the character’s name in its own box? に書いてるけど…英語っていうね(;´д`)
以下、内容を簡単適当良い加減超意訳してみた。
Q: どのようにキャラクター名の独自表示領域を設置できますか?
A: “show_two_window” を使えば可能です。
もしあなたがキャラクターの名前をメインウィンドウの外に表示したいとき、次の式をを加える必要があります。
$ e = Character("Eileen", show_two_window=True)
この名前ウィンドウの配置、背景などを編集するには、次の例のように属性を変更することで可能です。
style.say_who_window.background = Frame("frame.png", 15, 15) #Background skin style.say_who_window.xalign = 0.0 style.say_who_window.yalign = 1.0 #style.say_who_window.xpos = 100 #For precise placement #style.say_who_window.ypos = 100 #For precise placement style.say_who_window.left_padding = 15 style.say_who_window.top_padding = 15 style.say_who_window.right_padding = 15 style.say_who_window.bottom_padding = 15 style.say_who_window.xminimum = 150 style.say_who_window.yminimum = 15 style.say_who_window.xfill = False
とりあえずメインウィンドウの外に表示ができた。
全体のイメージが決まるまではデフォルト設定で使ってみよう(・ω・)
ver 6.14.1
暗い画面の真ん中に、「第一章」と白い文字を浮かべる。
これからゲームが始まるときの区切りや、タイトルの演出などに使います。
割りとありきたりな表現ですが、ユーザーへここが区切りであることを伝えやすい方法ですね。
label start: show expression Text("第一章", size=36, yalign=0.45, xalign=0.5, drop_shadow=(2, 2)) as text1 show expression Text("-人の心を持った人形が人間ならば、花の心を持った人間は花になれるのだろうか-", size=18, yalign=0.55, xalign=0.5, drop_shadow=(2, 2)) as text2 with Dissolve(1.5) pause(4.0) hide text1 hide text2 with Dissolve(1.5)
show expression Text という命令を使うと、
キャラクターや背景に被せるようにし上部レイヤーに文字を表示できます。
上記の例だと、中央に上下2列でDissolveをかけて表示しています。
pauseをかけて文字の演出をコントロールしてるんだけど、クリックされると
ぱたっとDissolveとかが途切れちゃう。クリック無効にする方法もあるみたいだけど
なんだか上手く行かなかった。色々難しいです。
ver 6.14.1
文章にルビをつけるには、まず options.rpy のスタイル設定を変更する。
チュートリアルゲームから該当箇所をまるまんま流用したので詳しいことはわからないヽ(・ω・)/
## Note that these only change the size of some of the text. Other ## buttons have their own styles. style.default.line_leading = 10 # デフォルトのテキスト行間 style.button_text.line_leading = 0 # ボタンテキストの行間 style.ruby_style = Style(style.default) style.ruby_style.size = 10 # ルビのフォントサイズ style.ruby_style.yoffset = -20 # ルビの縦軸位置 style.default.ruby_style = style.ruby_style # デフォルトのルビ設定に変更を適用する
んでもって、script.rpy などのラベル内文章に {rb}文章{/rb}{rt}ルビ{/rt} という形式で入力するだけ。
label start: "{rb}帝都{/rb}{rt}ていと{/rt}。" "かつてそう呼ばれた場所、東京。"
普通はゲーム内にルビを振ることはそう多くないと思うのだけど、
友人から誘われたゲームはルビが盛り沢山!(゚д゚;)
手作業ではとても時間がかかってしまう上にヒューマンエラーの可能性も多くなるので、
ルビを辞書化してしまって自動変換することを考えてみた。
といっても、プログラムのド素人が出来ることはたかが知れてるけどね!(ノ∀`)
ver 6.14.1
NVLモードで会話以外の文章(ナレーション)をさせるには、Characterで定義するが、
通常のキャラ設定のように定義すると、設定したキャラ名(この例ではn)を何度も書かなければいけない。
define n = Character(None, kind=nvl) label start: n "実直で堅実な父だったが、大きな劣等感を抱えていた。" n "それは息子であるところの僕に遺憾なく発揮された。"
ナレーションにはデフォルトで予約されている変数narratorがあるので、
そこにNVLモードの設定をしてあげると楽ができます。
define narrator = Character(None, kind=nvl) label start: "実直で堅実な父だったが、大きな劣等感を抱えていた。" "それは息子であるところの僕に遺憾なく発揮された。"
ADVモードに戻りたい時は
$ narrator = Character(None, kind=adv)
といった命令を設定すると元のADVモードに戻ります。
ver 6.14.1
Ren’Pyには2つの表示モードが標準実装されています。
・ADVモード: デフォルトではこのアドベンチャーモードです。恋愛ゲーム等に見られる画面上部にキャラクター表示、画面下部に会話が表示される形式です。
・NVLモード: ノベルモード。かまいたちの夜のような画面全体に文章が表示され、背景としてキャラクターなどが表示される形式。
NVLモードへの変更についてはWikiに説明があるのでそちらを参考にされると良いと思います。
ここでは備忘録として簡単にまとめておきます。
NVLモードに変更するには scrript.rpy などに下記を付け加えます。
init python: config.empty_window = nvl_show_core # NVLモード・ウィンドウの制御を有効化 config.adv_nvl_transition = dissolve config.nvl_adv_transition = dissolve
config.empty_window を nvl_show_core に設定すると、NVLモード・ウィンドウは、トランジションを伴って表示されます。
最後の2行では、ウィンドウの表示/非表示の切り替えに使われる既定のトランジションを設定しています。
有効化することで、windowコマンドによってウィンドウの表示/非表示ができるようになります。
NVLモードでtransitionを使った場面転換をすると、ADVモードのウィンドウが一瞬表示されたりします。
デフォルトではtransition時にウィンドウを表示し続ける設定になっていますが、これをtransitionするときには
ウィンドウを消すように設定(False)すると、NVLモードにADVモードのウィンドウが出てくることはありません。
init python # トランジション中もウィンドウを表示させる場合はフラグをTrueに _window_during_transitions = False
ver2.7
codecsモジュールのopen関数を使う。
import codecs fp = codecs.open("read.txt", "r", "shift_jis") # shift_jisのread.txtを読み込む fp = codecs.open("write.txt", "w", "utf-8") # utf-8でwrite.txtに書き込む
実行後のwrite.txtには文字コードがUTF-8で出力される
参考
[文字コード] ファイル入出力時にエンコードを指定する – nelnal@python
Pythonライブラリリファレンス 4.9 codecs — codec レジストリと基底クラス
ver 6.14.1
Ren’Pyは元々英語圏のソフトなので、標準では日本語の文章が正常にゲーム画面に表示されなかったりする。
サンプルゲームや、チュートリアルソフトもそのままだと英語でよくわからない(´・ω・`)
Wikiのチュートリアルに「チュートリアルゲーム日本語訳(v6.14)」があります。
ダウンロードして解答した中にある3つのファイルを、ゲーム毎に個別のgameディレクトリに置くと日本語化は完了です。
1. VL-Gothic-Regular.ttf (日本語フォントファイル)
2. translations.rpt
3. translations.rpy
ファイルの内容をテキストエディタで見るとわかりますが、はすごく簡単な仕組みになっています。
< Help > ヘルプ
日本語→日本語の変換もできるのか試してみましたが反映はされませんでした。英語→日本語の場合しかうまくいきません。
ルビ変換をこのtranslations.rpt でやれたら楽なのになぁとちょっと残念。
でも文章データ側で英語の人物名表記をしておいて翻訳ファイルで日本語の人物名にするなど、多言語化は比較的対応がしやすそうです。
ver 6.14.1
ちょっと気になったのが、配布したときにソースが丸見えになってしまうこと。
テキストエディタとかで普通に分岐の条件とかフラグが見えてしまう;;
でもどうやらそれを読みにくくする機能がRen’Pyにはついてるらしい(・ω・)
でもランチャーにはそんな機能はなく・・・。
よくよく調べてみたら、options.rpyに書くところがあった。
## To archive files, classify them as 'archive'. build.classify('game/**.png', 'archive') build.classify('game/**.jpg', 'archive')
上の例だと、pngやjpgの画像がビルドしたときにはarchive.rpaって1つのファイルに格納されて、
個別のファイルで見れないようになりますよーってことみたい。
難読化っていうぐらいだから、暗号化みたいに絶対見れないってわけじゃなさそうです。
プログラマーとかなら解析できるけど、一般の人はすぐには見れないかもって感じでしょうか。
build.classify('game/**.png', 'archive') #png形式のイメージファイル build.classify('game/**.jpg', 'archive') #jpg形式のイメージファイル build.classify('game/**.ogg', 'archive') #ogg形式のオーディオファイル build.classify('game/**.rpy', 'archive') #プログラムファイル build.classify('game/**.rpyc', 'archive') #プログラムの中間ファイル build.classify('game/**.ttf', 'archive') #フォントファイル
いまはとりあえずこんな設定にしてみます(・ω・)b