投稿記事

ツクールMVの記事 (3)

sol-fa-soft 2020/02/09 23:48

Ci-enをやってなかった時期にDLsite blogに書いたRPGツクールMV関連記事

 DLsite blogが5月でサービス終了とのことなので、Ci-enをやってなかった時期に書いた記事2件をここに置いときます。

↓サムネイル用w

2018年7月23日 ツクールMV研究(3)

Ci-enの続きを、まあ適当に。

逆上がりに失敗するイベントと成功するイベントを作ってみました。
ちゃんと逆上がりに見えますかね…?

文字が邪魔ですが、とりあえずこういう風に書いておかないと何がなんだか。
このために使っているプラグインは「YEP_EventMiniLabel」です。

プレイヤーを中途半端な位置に移動させるために、相変わらず
移動ルートの設定で this._y という変数に小数を足したり引いたりしています。
この変数、移動ルートの設定の外では this.character(-1)._y という名前です。

小数を足したり引いたりすると頻繁に浮動小数点演算による誤差が出て、
整数に戻ることは基本的にありません。
今日は

this.character(-1)._y=Math.round(this.character(-1)._y);

というスクリプトだけ覚えて帰ってください。
この値を四捨五入して整数にします。

2018年7月28日 ツクールMV研究(4) ニューゲーム時に特定スイッチをONにするプラグイン

 ツクールってほんとおもろい理念で作られておりまして、なんか普通のゲームプログラマとして制作に望むと色々と裏切られるんですな。あって然るべき機能が、見当たらないことがよくある。

 一番でかいのは、イベント(マップ上に表示されるNPCなど)が存在する条件としてNOTを使えないことです。他にも、イベントの存在条件に「この変数が特定数値以下」というのが使えないとか。(「以上」はある。イコールとかはない)
 どうしてもそれらを使いたい場合、反転したフラグ(ツクールMVでは「スイッチ」という名前)を用意したり、あらかじめ変数を見ておいた上でのフラグ立て等をやっておかなければいけません。

 その代わり「常に、イベントページは右を優先する」という変な仕組みがあり、これが物事を……単純にしてるんだか複雑にしてるんだか…。

 もう一点、私が欲しかったのが、「ニューゲーム開始時に特定スイッチをオンにする」という機能。
 通常、全てのスイッチはオフの状態でゲームが始まりますが、ひとつでもいいから最初からオンになっているスイッチがあれば、そこからコモンイベントを自動的に起動させてプレイヤーに初期アイテムを持たせるとか、その他最初にやっておくべき初期設定を確実に済ませることができます。

 ゲームの完成時には初期マップは決まっているはずなのでそこに自動イベントを置けばいいのですが、テストプレイ中は色々な場所からスタートさせるので不都合が生じやすいんですよね。テスト中のゴミが不具合として残りがちな感じもするし。

 というわけで、単純にその機能だけを実現するプラグインを書きました。
 ニューゲーム時開始時に40番スイッチをオンにする「solfa_StartUpSwitchOn.js」です。ご自由にお使いください。

// solfa_StartUpSwitchOn.js
//
// (c) 2018 KIRIHARA Miyahito
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
//
// Version
// 1.0.0 2018/7/1 書いた
// 1.0.1 2018/7/25 不要な行があったので削除
//
// https://www.solfa.jp/

/*:
 * @plugindesc ニューゲーム開始時に40番スイッチをオンにするプラグイン
 * @author 桐原巳弥人
 *
 * @help ニューゲーム開始時に、40番のスイッチをオンにします。
 * それ以外何もしません。
 *
 * 40番というのを別のスイッチにしたい場合はソースを触れこのやろう。
 *
 * 利用規約:
 *  作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)
 *  についても制限はありません。
 *  このプラグインはもうあなたのものです。
 */
(function () {
    var _setupNewGame = DataManager.setupNewGame;
    DataManager.setupNewGame = function(){
        _setupNewGame.apply(this);
        $gameSwitches.setValue(40,true);
}
})();

solfa_StartUpSwitchOn.js (1.04kB)

ダウンロード

 プラグインパラメータを取得するのがなんかミョーにめんどくさいので40という番号はリテラルです。これを変更したい場合はご自分で書き換えてください。
 最低限、32行目の

$gameSwitches.setValue(40,true);

 これさえ変えればOKなはず。

sol-fa-soft 2018/06/28 11:42

(ツクールMV)フキダシアイコンをスキップ可能にするプラグイン

「ウェイト処理」は辛抱ならん

 ゲーム中のウェイト(何もしない何もさせない待ち時間)ってどう思います?

 プレイヤーとしての私は、基本的に辛抱ならんのです。セリフ表示が流れていく中で「話しているリズム」を演出するために1秒に満たないウェイトがちょいちょい入ってるだけでもすんごいイライラするし、そもそもゲーム中のテキストが「1文字ずつ表示される」という仕組みにも疑問を感じます。自分が読むスピードより表示の方が遅いとそれだけで発狂ものです。あれはおそらく堀井雄二氏が始めたシステムで、当時は漢字が表示できなかったからあの速度でもやれるのですが(と、このへんの話はすごく長くなるので省略。機会があったらまたいずれ…)

「フキダシアイコン」も時間がかかりすぎでは?

 で、今回の本題。

 他の部分はまあいいのです。「ウェイト」というイベントコマンドや \.(1/4秒待つ) \|(1秒待つ) といった制御文字はそもそも作者として入れなければいいし、文字の表示速度に関しては偉大な先人達が作られた優れたプラグインがありますし。

 問題はフキダシアイコンです。

 これ自体は、文章なしで登場キャラクターのおおまかな感情を知ることができ、作者も省力できるし、ユーザーもキャラクターの仕草まで想像できて楽しく遊べるスグレモノだと思います。

 ただね、このフキダシがぴょこぴょこしてる間、1秒くらい待たされるんですよ。もうそのシーンが表現していることはわかってるのに、その余分な1秒があればどれだけ文章が読めるんだっていうこの感じ、わかりますかね…? わからないかもしれません。すみません。

というわけでスキップするプラグインを探しましたが……

 きっと、この鬱陶しいフキダシアイコンをスキップしてくれるプラグインを誰かが既に作っているに違いない。そう思って探しました。

 フキダシアイコンを表示するだけは表示して、キー入力があったらスキップする。ただそれだけでいいのですがなかなか見当たらない。

見当たらないので、自分で書きました。

 機能は以下の通りです。

  • フキダシアイコンを表示している間、okキーあるいはctrlキーが押されたら(押されていたら)それを終了します。
  • okキーが既に押しっぱなしだった場合は、フキダシアイコンが一瞬だけ見えます。

BalloonSkip.js (1.30kB)

ダウンロード

 MITライセンスで公開しますので自由に使ってください。


(以下は読まなくていいと思います)

ソースの解説など……

 仕組みは驚くほど簡単です。せっかくなのでソースを具体的に解説してみましょう。

 まずは、プログラムの学習でよく出てくるあれ。そう、おまじないです。意味わからなくてもこう書いときゃいいです。

(function () {
    'use strict';
    	// ここにプラグインの内容を書く
})();

 プラグインの内容としては、最初にこのプラグインの名前を書きます。このプラグインの名前はシンプルに BalloonSkip に決めました。pluginNameという変数を作って文字列を入れれば自動的に「プラグイン管理」で表示される名前になります。型はvarというキーワードが勝手に決めてくれるので気にする必要はありません。

※訂正:
「プラグイン管理」で表示される名前はファイル名から取っているようです。pluginNameというのはここでは全く意味のない変数で、参考にしたプラグイン(具体的にはトリアコンタン様のソース)で、プラグインパラメータを取得する際にPluginManagerに渡すために変数を作っているようです。
なのでこの段落の解説は間違いです。失礼しました。

    var pluginName = 'BalloonSkip';

 次にプラグインの処理として、まず _update という名前の変数を作り、そこに Sprite_Balloon.prototype.update というフキダシアイコンを監視して書き換える(=アニメーションを実現したり、終了のタイミングで消したりする)関数をそっくりそのまま代入します。なんか変数と呼ぶのはおかしい感じが若干しますが、そういうものみたいです。

    var _update = Sprite_Balloon.prototype.update;

それから Sprite_Balloon.prototype.update をまっさらな状態に再定義。

    Sprite_Balloon.prototype.update = function() {
    	// ここにやりたい処理を書く    
    }

 やりたい処理というのは以下の通りです。

  • okキーが押された、つまり input.isTriggered('ok') が true  あるいは
  • ctrlキーが押しっぱなしである、つまり input.isPressed('control') が true

 のとき、フキダシアイコンの残り表示期間(おそらくフレーム数)を表し、この値がゼロ以下になるとフキダシアイコンが終了となる変数 this._duration にゼロを代入します。この thisSprite_Balloon.prototype.update を指す、そのまんま代名詞のような役割をするキーワードです。

    if(Input.isTriggered('ok') || Input.isPressed('control')){
            this._duration = 0;
    }

 それから、

  • okキーが押しっぱなしである、つまり input.isPressed('ok') が true

 のときは、this._duration を 5 だけ減らします。this._duration は放っておいてもフレームごとにデクリメント(1だけ減らす)されるので、つまり終了までの期間が大幅に短くなるということです。これにより即時終了するのではなく、ある程度の時間(と言っても一瞬ですが)をかけて終了させることになります。

        if(Input.isPressed('ok')){
            this._duration -= 5;
        }

 最後に、元々の Sprite_Balloon.prototype.update に入っていたオブジェクトの機能をぜんぶくっつけます。これは最初に _update という名前の変数に入れましたよね。

        _update.apply(this);

 apply(this) の概念はなかなか面白いのですが説明すると長くなるので割愛します。興味のある方は適当にぐぐって調べてください。
 以上がこのプラグインの内容です。ご清聴ありがとうございました。

 この処理は間違ってる、この変数は触るべきではない、この関数の返り値は保証されていない、みたいなご意見があったらコメントで教えてください。偉そうな解説ぶっこいてるけど何せJavaScriptに関してはほぼ素人、一夜漬けでコアスクリプトを読みながら文法を推理し、有名なプラグイン大家の書いたソースを参考にして作った、というものです。実装にはいくつかの方法があるように見えましたが、ちゃんと正解を選択している自信はありません。特に「5減らす」のあたり超てきとーだし。理由はよくわかんないけど5減らしたらちょうどいい感じになっただけなので。

プログラムは楽しいよ!

 ところで、RPGツクールMVのプラグインの仕組みってGUIでいじれるパラメータとかプラグインコマンドとかあって便利だけど、それに頼ってるとプログラムそのものや、プラグイン制作の楽しさに触れることができずちょっともったいない気がするのですがいかがでしょうか。

 例えばこのプラグインの ok という部分を tab に変えると、okキーではなくtabキーでフキダシアイコンが終了します。 isTriggeredisReleased に変えると、押した瞬間ではなく離した瞬間が検知されます。こういうのを試してみて、

「おっ、ほんとだ。ふふっ」

 ってなる方はプログラムを楽しむ素地があると思います。プログラム快楽回路(今作った言葉)はこういう、ソースのちょっとした改造から育まれるとマイコンBASICマガジンで育った私なんかは思うわけです。

 ぜひ一緒に、コアスクリプトを読むだけで性的絶頂を覚えるような体質を目指しましょう! この方みたいにね。

sol-fa-soft 2018/06/27 22:45

(ツクールMV)自作の遊具

近頃は、いくつかの勝手なプロジェクトを食い散らかしながら楽しそうな部分だけを作ったり作らなかったりしています。

 この前まで「水浴び王女の休日(仮)」という姫がお城を抜け出して湖で水浴びして襲われたり服を盗まれたりするようなものを手がけていました。しかしそれはいったん脇に置いといて、今は「かえりみちの露出RPG(仮)」というのを進めています。水泳授業の間に下着が盗まれてノーパンで帰るような話です。

 とにかく中が空洞になっていて複数の人が入って遊べる(意味深)ような公園の遊具が欲しかったので自作しました。「赤富士」と命名。頂上の穴から出入りするためのハシゴは、最初は縄だったのですが中を見るとなんか絞首台みたいになっちゃったのでやめました。

(↓音楽はありませんが効果音が出るので一応音量注意)

akafuji.png (36.83kB)

ダウンロード

 画像素材も置いときます。これと、SF_Outside_C.pngの下の方にある赤い屋根とかを組み合わせて作ります。滑る方法とかは、ツクラーだったら見ればわかりますよね?(わからない場合はコメントでもくだされば説明する努力をしてみます)

 ついでに左右方向に置くための平らなタイプのベンチと、上方向に伸びた緑のフェンスが壁に突き当たったときに自然に見えるような接合部の画像も一緒に入れておきましょう。大盤振る舞いだな。

 いずれも標準のタイルセットの画像を独自に加工したものです。RPGツクールMVの正規ユーザで、このCi-enをフォロー、あるいは無料プラン以上のご支援をいただいている方は、RPGツクールMVのユーザーゲーム内での利用に限り、ご自由にお使いください。ゲーム種別(エロとかホラーとか?)の制限等はありませんし、クレジット等も不要です。

 以上、今日はこんな感じで。このCi-enでの情報公開が、何より、私の創作モチベーション維持に繋がればいいなと思います。誠に身勝手で恐縮ですが。

記事のタグから探す

月別アーカイブ

限定特典から探す

記事を検索