2020年05月27日

Ren'Pyブラウザゲームの投稿方法、ほか


こんにちは、crAsmの倉下です。
標記の件、これまで何となく様子見状態を維持していましたが
先日お問い合わせを頂いたこともあり(有難いです><)
この機会にブログに掲載しようかと思います。
内容に誤りや問題などがございましたら大変恐縮ですがご指摘頂けますと幸いです。
また、Ren'Pyのブラウザ対応は現在β版のようですので予めご了承ください。



2019年秋にふりーむ!さんにRen'Pyブラウザゲームを投稿し
無事に公開して頂くことができました(ふりーむ!様と開発者様の多大なご協力のもと…)
また、PLiCyさんにも投稿しています。


■ 対応OS・デバイス

Ren'Pyブラウザゲームは現在、iPhoneからのプレイができません
(起動する場合もありますが不安定です、特にセーブ時)。
WindowsPC、およびAndroid端末からのプレイは可能です
(できない場合は別のブラウザを使用してみてください)。
macやLinuxでのブラウザ版プレイについては確認が取れていません。

尚、ダウンロード版やアプリ版は各種OS・デバイス向けに出力可能です。
スマートフォンアプリ(特にApple Store向け)は投稿にお金がかかるので容易に試せませんが…。

関連して…ブラウザ版・ダウンロード版・アプリ版いずれでもそうですが、
製作時にモバイル・タブレット向けUIを仕込むことができます。
デバイスに応じて違うボタン配置や文字サイズにできます。
詳しくはドキュメントをご覧ください。
転生してない悪役令嬢はまだ運命を知らない(PLiCy版)
PC・タブレット・モバイル用UIを用意してますので、
タブレットやAndroidスマートフォンをお持ちの方は見比べてみてください。


■ 投稿方法

PLiCyさんに投稿する場合は、普通にHTMLのゲームとして投稿すればOKです。
Ren'Pyランチャーのweb(Beta)からウェブアプリケーションをビルドし、
生成されたファイル(「index.html」を含むフォルダのファイル全て)を選択して
zipファイルにしたものをアップロードするだけです。
投稿後10分程度で公開されるので、お試しでの投稿も気軽にできます。
例)TEADmini(PLiCy版)

ふりーむ!さんに投稿する場合は少々作業が必要となります。
倉下は以下の手順で投稿用ファイルを生成して投稿しています。

★ Ren'Pyブラウザゲームのふりーむ!への投稿方法 ★
1) ランチャーのweb(Beta)からウェブアプリケーションをビルド
2) game.zip → game.data へと名前変更
3) index.htmlをテキストエディタ等で開き、その中の
 「var DEFAULT_GAME_FILENAME」の値を'game.zip' → 'game.data' に変更
4) index.wasm.gz を展開し(※)、.gzファイルを削除
 ※7-Zip(フリーソフト)のような展開用ツールが必要かもしれません


ご参考まで、実際にふりーむ!に投稿したファイルはこちらです。
作品はこちら → TEADmini(ふりーむ!版)

上記はふりーむ!での投稿に於いてのみ必要な作業です。
他投稿サイトを利用する場合は必要ありません(のはずです)。

補足です。ふりーむ!とPLiCyのほか、
itch.io という英語圏のゲーム投稿サイトで
複数のRen'Pyブラウザゲームが投稿されています。
こちらのページにRen'Pyブラウザゲームの一覧があります。
(20.7.25追記)「転生してない悪役令嬢〜 itch版」投稿しました


■ 余談

v7.3.5(現在の推奨バージョン)でブラウザゲームをビルドすると、
BGMがガタついたり動作がもっさりすることがあるかもしれません。
Ren'Py webの比較的新しいバージョン(※)では改善されていますので、
将来的には推奨バージョンにも組み込まれるのではないかと期待しています。
Patreon(クラウドファンディング)に参加していると入手可能


ご不明な点などございましたら、webサイトのメールフォーム等から
お気軽にお問い合わせください!
生憎そこまで詳しいわけではありませんが、分かる範囲でご回答させて頂きます。
posted by 倉下 遼 at 18:14 | Comment(0) | Ren'Py

2019年07月13日

viewportのスクロールバーの値をキープする


viewportのスクロールバーの値をキープする方法を探しました。
今までviewportを含むスクリーンをhideして再度showすると
スクロールバーの位置が変わってしまって、
今回の作品の仕様上それだと不便だったのですが…何とか解決できました。
コード(抜粋)は以下です。

※ブログの仕様上、以下のコードではインデントが省略されています。

init python:
uia = ui.adjustment()

screen main_menu():
tag menu
viewport:
scrollbars "vertical"
spacing 5
child_size (None, 120 + 105*(len(sl_label) - 1))
yinitial int(select_posi)
viewport id "vp":
draggable True
yadjustment uia

imagebutton:
idle "images/icon_memo1.png"
hover "images/icon_memo2.png"
action [SetVariable("select_posi", uia.value), Call(sl_label[i][0] + "_sch")]


-

それから、折に触れてinit python, define, defaultの違いを確認。

define x=0

init python:
x=0
と同じだそうです。


posted by 倉下 遼 at 09:46 | Comment(0) | Ren'Py

2019年05月08日

セーブ時に任意の情報を加える、ほか


最近更新した中からいくつか。


まず、ツイートの画像3枚目、クイックメニューのウィンドウを隠すボタンは
textbutton _("x") action HideInterface()」で作っています。

だいぶ前に英語でメモしてましたが、念のため再掲。

---

それからツイートの画像2枚目、セーブ画面の情報追加についてです。

screen.rpyの「screen file_picker():」のセクションを見ます。

セーブデータの表示には日付・時刻に加えて
FileSaveName(i)の戻り値、すなわち
ファイルがセーブされたときの「save_name」も表示できるようです。

>> FileSaveName(name, empty=u'', page=None)
>> ファイルがセーブされたときの save_name かファイルが存在しなければ empty を返します。
(ドキュメントより)

つまり、セーブ時にsave_nameに値を与えればよいということになります。

言い換えると、FileAction(i)と同時にsave_nameに値を与えます。

しかし、単純にこれをやるとロードのときにバグります。
screen file_picker()はセーブでもロードでも使われる画面のためです。
従って場合分けをします。
renpy01.png
無駄に文字が多いですが…
「$ save_info = ... 」で save_info(という変数を作った)に文字を入れ、
セーブのときだけこれをsave_nameとして与えています。
SetVariable( )は変数に値を入れるというアクション。

「_last_say_what[:14]」は、セーブしたときにウィンドウに表示されていたメッセージの
頭14文字を取るというものです。後ろに「.replace...」と続いている部分で
改行コードを取り除いています。


尚、TEADはguiが刷新される前に作成していますが
新しいguiで単純に上記をやると表示がおかしくなります。
スタイルをデフォルトから一部変更するか別途定義する必要があるようです
(今回はtextbutton "xxx"に対しbackground None・xsize 30・ysize 15を足しました)。
タグツイートしたら反応してくださった方に教わりました;下記のスレッド一式参照。




posted by 倉下 遼 at 23:16 | Comment(0) | Ren'Py

Ren'pyのカラークラス


先日日記で中途半端に触れた話題ですが…

Ren'pyには独自のカラークラスというのがあるようです
(Pythonのcolorsysだと上手くいかない)。

「#112233」のようなカラーコードからRGB、HSVカラー空間に簡単に変換できます。
また、RGBやHSVのそれぞれの値を変更することで
ある意味お絵かきソフトでシークバーを動かす感覚で(?)色を変えたりできます。

ドキュメント(このページは英語のみ):Color Class

先日遊んでみたもの(読みにくいです、物好きな方向け)。


便利なのは、このくらいの簡単な色変更なら次の2つで出来るようです。
ドキュメントの一番下の方に書いてあります。

shade( xx ): 元の色に 黒色を混ぜた色をつくる。
tint( xx ): 元の色に 白色を混ぜた色をつくる。

いずれもカッコ内には0.0 - 1.0の値を入れます。

例えばキャラクターの定義文などで
what_color = Color("#112233").tint(0.75)
と書くと#112233より少し薄い色を指定することができます。

自分の場合は、キャラクタごとに色を決めているので(例えばディルなら#D26CC0)、
これより少し薄い色を作りたいというときにtintを使いました。

posted by 倉下 遼 at 22:43 | Comment(0) | Ren'Py

2019年04月27日

Ren'pyの読み上げ機能など


最近知ったRen'pyの使い方について幾つかツイートしたり助言を頂いたりしていたので、備忘録としてブログにも転載しておきます。

英語の作品でセリフを読み上げさせて理解しやすくする&リスニングの練習に使うことができることに気づきました。


ゲーム内のHelpを作りこんでいるときにRen'pyの読み上げ機能を知りまして。自分のゲームの誤字チェックにも使えるかなと思ってます。


それから以下のスレッドに続く一連のやりとりでは、extendを使ってセリフ中で表情を変更する場合にトランジションを有効にする方法(を教えていただきました)。


こちらは、スクリプトからセリフを抽出するプログラムを作ってみたら実はRen'pyの標準機能として搭載されているとご指摘いただいたものです;


Ren'pyに関しては他のユーザーの方に助けて頂くことが多くて、本当に頭が上がりません;
ちなみに倉下は、問題は解決できないかもしれませんが一緒に考えることはできますので、それでも良いという方はお困りの際にご遠慮なくお声かけ頂ければと存じますm(_ _ )m
posted by 倉下 遼 at 16:01 | Comment(0) | Ren'Py

2019年01月08日

How to make a button to hide message window


I wanted to know how to make a button to hide the message window in Ren'py. I searched before but I could not find. However, he told me below.




Then, I could do it!
I also was helped before by him and Ren'py users on Twitter. I really appreciate them!!
posted by 倉下 遼 at 20:23 | Comment(0) | Ren'Py

2018年08月15日

nvlスクリーンの前に一瞬sayスクリーンが出るのを防止する


只今制作中のGreen Grassは小説スタイルなのでnvlモードを多用します。
それに当たり1つ困っていたのが、
nvlモードで文書を表示するとき、nvlスクリーンの前に
一瞬sayスクリーン(nvlモードでない方のメッセージウィンドウ)が
出てしまうという現象です。

解決方法としては、Option.rpyなどに
 define config.empty_window = nvl_show_core
 (又はinit pyshon:以下にconfig.empty_window = nvl_show_core)

を入れると良いようです。

詳細はこちら → NVL モード

途中でsayスクリーンを使いたくなったときは
$ config.empty_window = defaultを入れると良い様子?
(say_show_coreやadv_show_coreではないらしい)。確信はありません。
config.empty_windowの説明も見ましたがよくわかりません;


また、上記リンク先に記載のある「what_color」(キャラを定義する際に
キャラ名を表示させない代わりにキャラ別に文字色を指定する)
なども今回導入しました。


posted by 倉下 遼 at 23:03 | Comment(0) | Ren'Py

2018年07月07日

メインメニュー・Start()とJump()


前回投稿してからもう一ヶ月ですか、全くそんな感覚無かったのですが。早い。


Ren'py7が正式リリースされましたので…というよりは気まぐれで
Green Grassのメニュー画面を作ってます。
ここをしっかり作っておくことで調整・デバッグが楽になるので…というよりは
単にスクリプト打って作り込むの楽しいので。
たまにムシャッとなりますが。


今回は短編集なのでStartというラベルが無く、main menuから直接
各ラベルに飛ぶ仕様です。
GG_001.png

ここで困ったのが、何故か各ラベルにジャンプしてもquick_menuが表示されない。
かといって強引にmein_menuをスキップ(後述)して
mein_menuをstartラベルで呼び出すとmein_menu表示中にも
quick_menuが表示されてしまう。
他にもmein_menuのスクリーンが消えないとか
returnで意図しないところに飛んでしまうなどという問題が。

解決方法。
action Jump("xxx")を使ってmain_menuから各ラベルに飛んでいたのを
action Start("xxx")に変更しました。
これで意図通りに動いています。
StartとJumpの違いってよくわかってませんでしたが
こういうことだったんですね。


補足。
最近Ren'py日本語版ドキュメントの
スクリーンのアクション、値、関数」のページから
アクションの一覧が居なくなってしまいました(前はあった気がする)。
英語版だと健在です→「Screen Actions, Values, and Functions
他にも一部、英語版のみに記載されている内容があるようです。
編集中なのかもしれません。
そもそも翻訳してくださってる方が居るの有り難いです。



途中ですっ飛ばしたmain_menuの件。

label main_menu:
  return

とスクリプト内に打つとmain_menuの表示を飛ばしてstartラベル?に行けます。
中身に処理を入れることもできます。
詳しくはドキュメントの「特別なラベル」参照。
結局今回は使わずに済んだのですが。



おまけ。
メインメニューにビューポート(上下左右にスクロールできる窓)を入れました。
viewportの説明はRen'pyのチュートリアルがわかりやすいです
(ピンクの髪の女の子が説明してくれるアレです)。
「Screen Displayable」→「Viewport」です。

*
posted by 倉下 遼 at 06:52 | Comment(0) | Ren'Py

2018年01月19日

label中のpythonステートメント


すごい今更感ですが…

■ label中のpythonコード
Ren'pyスクリプトにPythonのコードを入れるときには
「init python」を使わなければいけないのかと思ったら
「python」でいいようでしたorz

・「python」:書いてあるところまで来るとコードを実行する
・「init python」:ゲームロード前の初期化時に実行する
(クラス、関数の定義やスタイル、設定変数、永続データの初期化などに使用)

これでラベル中に一行pythonやif文以外のpythonコードを
心置きなく入れられます。例えばこんなのとか。
label sample:
  python:
    a = 1


■配列の要素を一括で確認 → all()
追記ですが、pythonの「all」関数を使えば
配列の要素が全てTrueのときにTrueを返せるので
コンプリート判定などに便利そう、ということに気づきました。
いずれ機会があれば使いましょう。


■画像でボタンを作る(imagebutton)
普通にTEADで使っていた命令なのに忘れていたという…

imagebutton idle ★ hover △ action ○○

★や△には"画像パス"やDisplayableを入れます。
Solidやm.Scaleが便利。
○○にはボタンを押したときのアクションを入れるというのはいつも通り。

詳しくは公式マニュアルの「スクリーンとスクリーン言語
に掲載されています。
posted by 倉下 遼 at 19:56 | Comment(0) | Ren'Py

2017年09月08日

Ren'pyのNew GUI Interface


久々にRen'pyネタ。最近ちょっと触ったらUIというかシスグラというか
いい感じに進化していて虜になってしまいました。
デフォルトでもかなりセンスのいいUIになる上、カスタマイズしやすい。

難点はgui.rpyで諸々完結するのかと思いきや
screen.rpyをいじってやらないと変更できない箇所があったりする点です。

例えばnvlモードの文書の行間を変更したかったのですが
gui.rpyからでは設定できず、
screen.rpy内のstyle nvl_dialogue:に
「line_leading gui.nvl_text_line_leading」を追加し
gui.rpyに「define gui.nvl_text_line_leading = 12」
を追加したらできました。

クイックメニュー(メッセージウィンドウ下部に出てくるSave, Loadなどのボタン)
についてもボタンサイズなどはgui.rpyから設定できるのですが
表示位置を上下左右に動かすのはscreen.rpyから設定しました。
(screen quick_menu():)
大抵の設定はscreen.rpyがgui.rpyで指定した値を参照してますが
たまにそうでないのがある、といった感じでしょうか。

あとデフォルトでnvlモードの高さ指定
(gui.rpyのdefine gui.nvl_height)がありますが
長い分が続く文字が重なったりして面倒なので
これは=Noneにしてしまった方がわかりやすいかも。

「nvl clear」がexcepted statement(予期せぬ記述?)として怒られると思ったら
ファイル名の付け方に問題があったようで、
ファイル名の頭にwをつけました。
だいぶ前にも言及しましたが、恐らくrpyファイルがファイル名順に読み込まれていて
ユーザーが作成したrpyファイルが
option.rpyやscreen.pry(もしくはlabel startを含むscript.py?)より
先に読み込まれると不具合を起こすのだと思います。

最近になってはじめて、Launcher(ランチャー)の右下の
Preferences(設定)からランチャーを日本語で使えるということを知りました。
でもフォントが気に入らないのでやっぱり英語で使い続けます。
英語の勉強にもなるし。

posted by 倉下 遼 at 21:56 | Comment(0) | Ren'Py