ラベル RPGツクールMV の投稿を表示しています。 すべての投稿を表示
ラベル RPGツクールMV の投稿を表示しています。 すべての投稿を表示

2017年9月20日水曜日

RPGツクールから自宅のWEBカメラを操作する

気は確かか?とか言われそうですが確かです。

昨今、あらゆる技術やサービスの敷居か下がってきていると感じたので、それらを組み合わせて何かできないかと考えた結果、このようなことになってしまいましたw

本件で使用した主なツールは以下のようなものです。
■ハードウェア
Raspberry Pi 3
■サーバーソフトウェア
Node-RED
■ゲーム作成ツール
RPGツクールMV

いずれも学習コストの低さが売りのツールなので、マニュアルとかを見ればすぐに扱えるようになると思います。
難易度的にも差はないと思うので、既にどれかひとつでも扱えるのなら、他のツールも余裕なはずです。
つまり、もしあなたがツクールでゲームを作れる根性があるのなら Raspberry Pi と Node-RED を駆使した IoT(モノのインターネット)くらい余裕な時代になったわけですよ!(暴論)

ラズパイとウェブカメラと百均のスピーカーとカービィとカービィ

出来上がったモノの紹介

ゲーム内で然るべき操作をすると、自宅のウェブカメラが撮影を行い、ゲーム上でその写真を確認することができます。


実動版を公開しても良かったのですが、Raspberry Pi で他のこともやりたいし、いつまで自宅で動かしてるかも分からないので、サーバー処理だけ除いたモノを公開しています。

とてもよくわかる構成と撮影の流れ

私が渾身の力を込めて描いた構成図をご覧ください。
わ け わ か ら ん w
一応説明いたしますと、インターネットより上が自宅です。
Raspberry Pi がサーバーで、その中で Node-RED が動いていて、ゲームやら画像やらをプレイヤーに配信する、という構成で、ゲームからは以下のような流れで撮影が行われます。
  1. プレイヤーがゲーム内で撮影ボタンを押す
  2. すると、ゲームから Node-RED に XMLHttpRequest で HTTPリクエストが発生
  3. リクエストを受け取った Node-RED が撮影と画像の更新の Linux コマンドを実行
  4. その後、プレイヤーが写真を見るイベントを実行したら、ゲームのエラー表示要素「ErrorPrinter」を利用して画像を表示する
あ、図中のRPGツクールMVとは、RPGツクールMVで作られたHTML5形式のゲームということですよ。念のため。

もうちょっと詳しく

ここからは「おいらもやってみたい!」とかいう奇特な方へ向けた情報をダラダラと提供します。

それぞれどうやって入手するの?

2017年9月現在の情報です。

Raspberry Pi

買いましょう。
ラズパイ正規総代理店のアールエスコンポーネンツと契約を結んだ個人向けの正規代理店の Raspberry Pi Shop by KSY(ややこしいw)での購入をおすすめします。(アフィとか無いから素直にクリックしとけ)
Amazon などと比較しても安いことが多いです。

私は Raspberry Pi 3(5,000円くらい)を使用しましたが、恐ろしく安い Raspberry Pi Zero(700円くらい)とかでも可能なはずです。
初心者はACアダプターなども含まれるセットを買うのが無難です。

流行っているのでネットや本で多くの情報を得ることができます。
でも古い情報には注意です。(OSガー、ニホンゴガー、とかいう問題はもはや過去のもの)
あと、やたらコマンドを打たせたがるページが多いですが、ほとんどの作業は GUI 上でも行なえるので、CLI 恐怖症の人も安心だぞ(ちょっとウソです)

ちなみに公式サイトはこちら(英語が読めない人は Chrome の翻訳機能で頑張れ)

Node-RED

ラズパイの標準 OS 「Raspbian」に、もとから含まれています。
詳しくはこちら→Node-RED日本ユーザ会 : ドキュメント
比較的情報が少ないのがネック。

RPGツクールMV

税別7,980円。買いましょう。
ただし、まれに Steam で 80%OFF とかしているため買い時が難しいですw
詳しくはこちら→RPGツクールMV

ゲーム(ツクール)からどうやって XMLHttpRequest を送っているの?

PNDK_HttpRequest プラグインを利用しています。
◆プラグインコマンド:PNDK_HR clear
◆プラグインコマンド:PNDK_HR send http://sample.com:1880/shoot/
という感じに、リクエストを投げっぱなしにしてるだけです。

どうやってゲーム内に画像を表示しているの?

ぶっちゃけゲーム内じゃないんですよね。
ツクールは元々、エラー表示のために「ErrorPrinter」という ID をもつ <p> 要素が HTML 内に用意されているので、そこに <img> 要素を突っ込んでるだけです。
イベントコマンドの「スクリプト」で直接以下のような javascript を書いています。
【注】このBlogの制約で<>は全角になっています!
var elem = document.getElementById("ErrorPrinter");
elem.innerHTML = "img src='http://sample.com:1880/rpg/www/photo.jpg'";
消すときは以下のようなスクリプトを実行させています。
var elem = document.getElementById("ErrorPrinter");
elem.innerHTML = "";

え?なんでツクール使ってんの?HTML と JS でいいじゃん。

使いたかったからDEATH!

どうやってラズパイからWebカメラに撮影させてるの?

ラズパイに fswebcam パッケージをインストールして Node-RED の exec ノードで fswebcam コマンドを利用して撮影と画像更新を行っています。
こんな感じ("写真を取って撮って保存"のところ)です↓
Node-RED で作ったフロー

ウェブサーバーは?

Node-RED の設定で httpStatic を指定しています。
指定したディレクトリに HTML とか JPEG とかを置いています。
詳しくこちら→ Node-RED日本ユーザ会 : 設定

ちなみに自鯖にはダイナミックDNSを利用

ダイナミックDNS(DDNS)のサービスは mydns.jp を利用しています。
先の Node-RED のフローの"1時間毎にDDNS更新"のところで IP を通知しています。

はんだ付けとかするの?

せーへんせーへん。
USB とか差し込むだけやで。

ポート開けるんだよね?

せやで。
Node-RED の初期設定での使用ポートは 1880 だに。
お使いのネットワーク機器の設定が必要たい。

最後に

べつに何千円もかけて部屋を覗かれるゲームを作りたかったわけではないですよ。ええ。

ラズパイに人感センサーとか赤外線リモコンモジュールとか追加してみたり、Node-RED で WebSocket サーバー動かしてツクールにオンライン要素追加してみたり色々やりたいことがあるので、またなんか作ったら公開したいと思います。


2016年11月29日火曜日

RPGツクールMV アクティブなウィンドウの背景色を変更できるプラグイン

正直RPGツクールのデフォ UI はちょっと分かりにくくて UX がフンガァァァな感じなので、せめて今操作できるアクティブウインドウだけでも見て分かるようにしようと思い作りましたふんぬらば。

ダウンロードはこちら
ライセンスは MIT だよ。


このプラグインは、アクティブ(操作対象)となっているウィンドウ背景の不透明度やカラーを変更することができます。
上の画像は通常のウィンドウをより薄くして、アクティブウィンドウの不透明度を上げています。
ちなみに、初期のウィンドウ背景は、画像(img/system/Window.png)の時点で多少透過されているため、それ以上は不透明化できないことに気が付かず2時間くらい無駄にしてしまわないようにご注意ください。しくしく。

不透明度だけでなくRGBでのカラー成分変更にも対応しています↓


他のレイアウト変更プラグインとも共存できます。たぶん。
特にスマホでのタッチ操作を考慮したプラグインと組み合わせるといい感じになると思うよ!

なお、不透明度だけの変更であれば問題ないのですが、ウィンドウカラーも変更する場合は以下の点にご注意ください。

「システム」の「ウィンドウカラー」の設定と、本プラグインの「アクティブなウィンドウカラー(赤緑青)」が異なる値になっているとウィンドウの開閉時にちょいと負荷が増えます。

これは、そもそも「システム」の「ウィンドウカラー」で色を変更すると、その分負荷が増えるのに、さらにそこからアクティブなウィンドウのカラーを変更する処理が追加されるためです。

赤緑青すべてが 0 だと負荷は発生しません。

負荷の軽い順の設定は以下のとおりです。

【軽】不透明度だけ変更する(ウィンドウカラーは変更しない)
システムのウィンドウカラー  :すべて0
アクティブなウィンドウカラー :すべて0
⇒負荷はほとんど増えません。

【並】システムのウィンドウカラーを変更する
システムのウィンドウカラー  :変更
アクティブなウィンドウカラー :すべて0
⇒ウィンドウの開閉時の負荷がちょっと増えます。

【並】アクティブなウィンドウカラーを変更する
システムのウィンドウカラー  :すべて0
アクティブなウィンドウカラー :変更
⇒ウィンドウの開閉時の負荷がちょっと増えます。

【普】本プラグインなしでシステムのウィンドウカラーを変更する
システムのウィンドウカラー  :変更
⇒全てのウィンドウが変更対象になるため開閉時の負荷がやや増えます。

【普】どちらも同じ値にする(すべて0でもない)
システムのウィンドウカラー  :↓と同じ
アクティブなウィンドウカラー :↑と同じ
⇒全てのウィンドウが変更対象になるため開閉時の負荷がやや増えます。

【重】両方を異なる値にする(すべて0でもない)
システムのウィンドウカラー  :↓と異なる
アクティブなウィンドウカラー :↑と異なる
⇒全てのウィンドウが変更対象な上にアクティブの処理が追加されるため開閉時の負荷がまあまあ増えます。

PC 向けならば特に問題ないですが、スマホも考慮する場合は、カラー変更は避けたほうがいいかもしれません。
また、そもそもツクールMVの v1.3.4 現在はウィンドウ関連のメモリリーク問題があるので、liply様作の liply_GC.js などの対策プラグインと合わせて利用ことをおすすめします。

2016年11月10日木曜日

RPGツクールMV アイテムなどの所持できる数を重量制にするプラグイン

武器とか99個も持って移動できるとか意味分からん!ってことでこんなプラグインを作りました。

このプラグインを有効にすると、個々のアイテムや武器・防具に重さが設定できるようになり、パーティーは決められた総重量までしかアイテムを所持できなくなります。

ローグライクなゲームやダンジョン系のゲームなどでは、所持品の吟味も楽しみの1つかと思うので、こいつを使ったらいいと思うよ。


変数による最大積載量(?)のコントロールや単位の変更なども可能です。
詳しくはプラグインのヘルプを読んでね。

★サンプルゲームはこちら

なお、メニューのレイアウトを変更するプラグインとかをいれてると崩れちゃうかと思いますが、そのへんは個々に対応するしか無いと思うのでガンバレ。

総重量ウィンドウの位置と不透明度を変更できるようにしました。 これによりメニューやショップのレイアウトを変更するプラグイン(例えば神無月サスケさん、Yoji Ojimaさん作の AltMenuScreen など)にも対応できるようになりました。



なお、例によって例のごとく理想的な Javascript の書き方ってのがよく分かってないので変なコードかもしれないけど我慢してくださいw

★最新の PNDK_LuggageCapacitySampleのダウンロードはこちら。(ツクマテ)


ライセンスは MIT だよ。どうぞご自由にお使いください。

2016年10月28日金曜日

RPGツクールMV かんたんにデータの送受信ができるプラグイン

とてもかんたんにサーバーへデータを送信したり受信したりできるようになります。
工夫次第でランキングや掲示板、1日1回のログインボーナス配布などなど色々なことに利用できるプラグインです。

例えば単純なランキングへのデータ送受信なら↓のように数行で作れちゃいます。



※もちろん別途ランキングを処理する PHP や CGI などが必要ですガ(^皿^)

サンプルゲームはこちら(PC・スマホ)
IE 用音無しサンプルゲームはこちら

PNDK_HttpRequest プラグインのダウンロードはこちら

■サンプルコードによる使い方説明

以下は PHP に name と score というデータを送り、ランキングの結果を表示するサンプルです。

◆文章:なし, ウィンドウ, 下
:文章:得点を送信するよ☆
◆変数の操作:#0001 受信データ = 0 ←(1)
◆プラグインコマンド:PNDK_HR clear ←(2)
◆プラグインコマンド:PNDK_HR add name \V[10] ←(3)
◆プラグインコマンド:PNDK_HR add score \V[11] ←(4)
◆プラグインコマンド:PNDK_HR send http://sample.jp/sample.php ←(5)
◆文章(S):速度 2 ←(6)
:文章(S):送受信中♪
◆文章:なし, ウィンドウ, 下
:文章:それではランキングの発表です!
◆文章:なし, ウィンドウ, 下 ←(7)
:文章:\V[1]

(1)まず、受信したデータが格納されるツクールの変数を初期化しています。
※必ずしも 0 である必要はありません。
受信したデータが格納されるツクールの変数はパラメータで設定できます。



(2)次に、このプラグインには送信データ専用の変数が予め用意されています。
前回の送信データが残っているとマズイので PNDK_HR clear で、その変数をキレイにしています。

(3)PNDK_HR add で送信データ専用の変数にデータを追加します。
PNDK_HR add name \V[10]
↑この場合、name というデータ名でツクールの変数ID 10番の値を送信データ専用の変数に追加しています。

(4)同様にツクールの変数ID 11番の値を score というデータ名で追加しています。
データはいくつでも追加できます。

(5)PNDK_HR send でデータを送信しています。
この例では http://sample.jp/sample.php に送信しています。
無事に通信が成功すればパラメータで設定した変数にサーバーより返信されたデータが格納されます。
(テキストデータの受信を想定しています。)

なお、エラーが発生した場合も、その変数にエラーメッセージが格納されます。
エラーメッセージとその意味は以下のとおりです。
ERROR TIMEOUT (タイムアウト)
ERROR ABORT (中止)
ERROR (なんやかんやエラー)
ERROR RESPONSE (サーバー側エラー)

(6)単なる時間稼ぎですw
送受信は一瞬では終わりません。
通信環境とデータ量によっては数秒かかることもあるでしょう。
そのため、受信が終わる前に受信用の変数を参照しても値は 0 です。
逆にそれを利用して受信が終わっているかを判断することもできますが、上記の例では割愛しています。

(7)受信したデータを文章として表示します。
このサンプルでは PHP がランキング結果のテキストを返信してくれることを想定しています。
万一、エラーが発生していたり受信が終わっていなければ、0 や ERROR なんたら、という文字列が表示されることになります。
そんなかっこ悪いことしたくない方は、いい感じに条件分岐してくださいw

■プラグインコマンドの説明

PNDK_HR clear
送信データ専用の変数を初期化します。

PNDK_HR add [データ名] [値]
送信データ専用の変数へデータを追加します。
[値]には制御文字が利用できます。

PNDK_HR send [URL]
送信データ専用の変数を[URL]へ POST メソッドで送信するとともに、パラメータで設定したツクールの変数にサーバーより返信されたデータが格納されます。

■注意点

通信はセキュリティで保護されません。
簡単に傍受できるので秘匿性の高い情報の通信には利用しないでください。
(クレカ番号とかパスワードとか個人情報とか)
このプラグインの利用により利用者または第三者に生じたいかなる損害や不利益も、このプラグインの開発者はその責任を負いません。

■使いみち

要はサーバー側の処理次第なのですが、これだけでも色々できるようになります。
以下はその一例です。
サーバー側のプログラムは別途根性で用意してください。
ただ、必ずしもデータを送信する必要はありませんし、プログラムではなくただのテキストファイルを読むだけにも利用できます。
  1. バージョン判定(古いバージョンで遊ばれるのを防ぐ)
  2. カウンター…というかプレイヤー動向分析(ゲームアナリティクス)
  3. UNIX タイムの取得(ズルされにくい日時の取得ができる)
    1. 毎日ボーナス
    2. 季節イベントとか
  4. プレイヤー間での情報共有
    1. ランキング
    2. 掲示板
    3. チャット(負荷かかりすぎかも)
    4. その他いろいろな情報
とはいえ仕様上、あまりリアルタイム性を求められるものには向きません。
他にもなにか面白い使いみちがありましたら教えて下さいませ。

2016年10月26日水曜日

RPGツクールMV 変数に小数を代入できるようにするプラグイン

なぜかツクールの変数には小数を代入できないようになっていたので、それを可能にするプラグインを作りました。
小数点以下第何位で四捨五入するかの設定も可能です。

ただ何故わざわざ小数を代入できないようにしていたのかが謎なので、その点ご留意ください。
一応、セーブしても問題ないことは確認済みです。

ちなみに、イベントコマンド「変数の操作」で小数を利用したい場合は、「オペランド」の「スクリプト」欄に小数を入力する方法がらくちんです。

↓ダウンロードはこちら
PNDK_FloatingPointVariables

2016年10月24日月曜日

RPGツクールMV ショプの価格変更プラグイン

たとえば魔王城近くの村は物価が高いとかできます。
まぁそれ自体はプラグイン使わなくてもできますが、総じて1.5倍とかできるので、個々に設定するより楽です。
また、買取価格(売却レート)も変更できます。
半額買い取りではなく等価買い取りとか、逆に引き取り手数料取ったりできます。

【2016/10/27追記】
小数ではなく整数の%で設定できるように仕様変更。


【2016/10/26追記】
新たに制御文字に対応しました。
これによりレートを変数で管理することができるようになり、例えばプレイヤーの選択によって世界の物価が変動する、などということも可能になります。
また変数なのでレートもセーブされることになります。

ただしツクールの変数には小数を代入できないので、変数を用いてレートをコントロールする場合は、小数を代入できるようにするプラグインを利用することをおすすめします。(パラメータやプラグインコマンドでの小数の利用は可能です)
サンプルゲームでは自前の「PNDK_FloatingPointVariables」プラグインを使用しています。


プラグインのコードもお作法にのっとった形に修正して、ファイル名も他とかぶりにくいように修正しました。

サンプルゲームはこちら(IE不可)
IE用サンプルゲームはこちら(音無し)

■ プラグインコマンドの使い方例

PNDK_ShopPriceChanger buy 50      #購入価格を半額(50%)にする
PNDK_ShopPriceChanger sell 100    #売却価格を購入価格と同じ(100%)にする
PNDK_ShopPriceChanger sell \V[n]  #売却価格を変数n番のレートにする
PNDK_ShopPriceChanger reset       #パラメータで設定した値にリセット

初めて作ったプラグインなので、やらかしてたらご指摘頂けると助かります。
PNDK_ShopPriceChangerのダウンロードはこちら