FC2ブログ

パワプロの栄冠ナインのように一気に仲間を入れる処理

コミックb


職業のメモ欄に<Class:Monster>、<Number:1>を入れておく。
コミック

アクターの空きを予め作っておく。
コミックa

変数1番には仲間にできる人数を入れる。ここを10などにすると一気に10人が入ります。
変数2番にはアクター番号の初期値の1を入れます。仲間の数が多ければ多いほど処理も多くなるのでその分、時間もかかります。

最初の条件分岐のスクリプトはパーティに特定のアクターがいるかどうかの判定
そのアクターがいなければ、そのidは空いているということなので仲間に加える処理をする。
$gameParty.members().contains($gameActors.actor($gameVariables.value(2)))

変数3番に職業を選別するための乱数を入れる。1を職業なしにした場合としているので2を初期値としています。職業の数だけ乱数を増やして下さい。

次は仲間のレベルを初期化してからパーティに加える処理です。
$gameActors.actor($gameVariables.value(2)).setup($gameVariables.value(2));
$gameParty.addActor($gameVariables.value(2));


次は仲間の職業をランダムで決める処理です。
$gameActors.actor($gameVariables .value(2)).changeClass($gameVariables .value(3), true);
$gameActors.actor($gameVariables .value(2)).setFaceImage($dataClasses[$gameVariables .value(3)].meta["Class"], $dataClasses[$gameVariables .value(3)].meta["Number"] -1);


$gameActors.actor($gameVariables .value(2)).changeClass($gameVariables .value(3), true);
このスクリプトは変数2番に格納されたアクターの職業をchangeClassを使って変数3番の乱数で決められた値にします。

$gameActors.actor($gameVariables .value(2)).setFaceImage($dataClasses[$gameVariables .value(3)].meta["Class"], $dataClasses[$gameVariables .value(3)].meta["Number"] -1);
このスクリプトはアクターの顔画像を職業のメモから取得するためのものです。職業に顔グラフィックを変える機能がついていないので自分で作ります。
職業のメモ欄に<Class:Monster>、<Number:1>と入れらている場合、facesフォルダに入っているMonsterというファイル名の1番の画像を読み込みます。

$gameActors.actor($gameVariables .value(2)).setCharacterImage($dataClasses[$gameVariables .value(3)].meta["Class"], $dataClasses[$gameVariables .value(3)].meta["Number"] -1);
歩行キャラの画像を変えたい場合は上記のように設定して下さい。charactersフォルダに入っているMonsterというファイル名の1番の画像を読み込みます。

$gameActors.actor($gameVariables .value(2)).setBattlerImage($dataClasses[$gameVariables .value(3)].meta["SVactor"]);
SV用の戦闘キャラ画像を変えたい場合は上記のように設定して下さい。その場合、職業のメモ欄に<SVactor:Actor1_1>を追加して下さい。デフォルトでハロルドの画像に切り替わるようになっています。ハロルドが嫌いな場合は任意のファイル名を指定して下さい。

$gamePlayer.refresh()
キャラグラフィックをスクリプトから変えた場合は必ずリフレッシュの処理をさせて下さい。じゃないとグラフィックが更新されません。

職業選択後の画像を何も変えたくない場合はこの部分は全部削除して下さい。

次は仲間の数を10人より多くしない場合の条件分岐です。
$gameParty.allMembers().length < 10
$gameVariables.value(1) > 0

その後に変数2番に+1加算をしてラベルジャンプで最初まで戻します。10人以上になっていないか、最初に決めた仲間にできる人数をオーバーしていないかの判定をします。


web拍手 by FC2
[ 2019/04/18 06:59 ] RPGツクールMV | コメント(0)

RPGツクールMVの特殊スクリプトコマンド集

RPGツクールMVの特殊スクリプトコマンド集


パーティメンバーに特定のスキルが追加されているかどうかの条件式

$gameParty.members()[メンバーID].addedSkills().contains(スキルID)
※メンバーIDはパーティの順番、0が1番目、1が2番目と一個ずつずれているので注意。

スキルを覚えているかではなくて、装備によってスキルが追加されている必要があるのでレベルアップで覚えたスキルはこの条件分岐では作動しない。

パーティの先頭に限っては以下のスクリプトでも可能。
$gameParty.leader().addedSkills().contains(スキルID)



ボタンを押したときの条件式

ボタンを押している間ずっと
Input.isPressed('key')
※マップ上で溜め撃ち攻撃などをしたいときはこっち。

ボタンを押したときに一回だけ
Input.isTriggered('key')
※連射イベントを作りたい場合はこっち。

keyにはいろんな値を指定できる。
決定 ok
キャンセル cancel
シフト shift
下 down
左 left
右 right
上 up
ページアップ pageup
ページダウン pagedown

※この他にもキーボードのボタンにも対応できる。



プレイヤーに対するイベントの当たり判定の条件式(スクウェアタイプ)

if((this.character(0).x +0.0) >= this.character(-1).x
&& (this.character(0).y +0.0) >= this.character(-1).y
&& (this.character(0).x -0.0) <= this.character(-1).x
&& (this.character(0).y -0.0) <= this.character(-1).y){
実行内容
}

※スクリプトに入力して使います。ここで指定している0.0というのはどれくらい拡張するのかという意味です。1.0を入れると倍(96px)になります。
上から順に右範囲、下範囲、左範囲、上範囲の座標を拡大する。

実行内容には直接指定してもいいですが規定の行数ではおそらく足りないのでコモンイベントを指定する方法をとった方がいいです。その場合は実行内容に↓のスクリプトを入れます。
this.setupChild($dataCommonEvents[コモンイベントid].list, this._eventId)



プレイヤーに対するイベントの当たり判定の条件式(サークルタイプ)

if(Math.sqrt(Math.pow(this.character(-1)._x - this.character(this._eventId)._x,2) + Math.pow(this.character(-1)._y - this.character(this._eventId)._y,2)) < 1.0){
実行内容
}

円形での当たり判定を作ります。円形のオブジェクトに対しての範囲を使う機会はほとんどないでしょう。例えばマップ上で敵が円形の魔法を唱えてその範囲内に入ったらダメージを食らうといった処理くらいですね。設定した半径よりも当たり判定が大きく感じるのは目の錯覚です。スクウェアタイプは直線上で範囲が決まるので目線のごまかしが効かないのですが、サークルタイプは外周に沿うタイプなので錯覚が起こりやすいです。



マップのリフレッシュをしない変数の入力

$gameVariables._data[変数番号] = n;
nはセットする値
※マップのリフレッシュをしないのでデータ上で扱うだけの場合に使います。
 ここで変更された場合はイベントの出現条件などをスルーします。



プレイヤーの移動速度を変更する

$gamePlayer._moveSpeed = n;
移動速度は移動ルートの設定の数値と同じ。一応、0も指定できる。

イベントの移動速度を変更することもできる。
$gameMap.event(イベントID)._moveSpeed = n;
イベントIDが1のとき1番のイベント、イベントIDが2のとき2番のイベント。わかりやすくて使い勝手が良いタイプです。
イベントIDにthis._eventIdを入力することによって【このイベント】という条件をつけることもできる。

$gameMap.events()[id]._moveSpeed = n;
id:0が1番のイベント、id:1が2番のイベント。ずれていくので間違いやすい方式。
this._eventIdを使うことはできないので上記の式の劣化版です。



持っているアイテムの個数を調べる

$gameParty.numItems($dataItems[アイテムID])

条件分岐にも使えます。
$gameParty.numItems($dataItems[アイテムID]) == 5;



隊列のフォロワーを先頭メンバーの位置に集める

$gamePlayer.gatherFollowers();
瞬時に集まるわけではなく、にゅるっと集まる。




web拍手 by FC2
[ 2019/04/14 20:45 ] RPGツクールMV | コメント(0)

ツクールMVでスクリプト条件判定いろいろ

■指定イベントの前方のマスが通行設定○ならtrue
$gameMap.events()[0].canPass(this.character(0).x, this.character(0).y, this.character(0).direction())

web拍手 by FC2
[ 2018/05/13 07:57 ] RPGツクールMV | コメント(0)

【ツクールMV】落とし穴を作って特定の位置に復帰させてみよう

落とし穴を作ってみようと考えた人はいると思います。しかし、落とし穴に落ちた後にどこの座標に復帰させるのかとか、いちいち復帰させる位置を設定しないでコモンイベントで使いまわしたいと思った人は多いのではないでしょうか。今回はコモンイベントでざっくりとやっちゃおうということでイベントを組んでみましょう。プラグインを使わず実行することも可能ですが、使ったほうが設定が簡単なので使っちゃいましょう。

使うプラグインはYEP_RegionEvents.jsです。

■とりあえずこんな感じで落とし穴を作って下さい。このときタイルセットから落とし穴の属性を◯に設定する必要があります。


■次にプラグインの管理からYEP_RegionEvents.jsを選んでパラメータのRegion 1 に 1 を入れて下さい。このイベントの意味はリージョン1番を踏んだときにコモンイベント1番を起動するというものです。同様に Region 2 に 2 を入れます。


■赤枠で囲まれたRをクリックするとリージョンを配置できるようになるので1番を選んで落とし穴に配置しましょう。


■上と同様に今度は2番のリージョンを適当に配置して下さい。この配置したリージョン2番に落とし穴に落ちた後に復帰します。当たり前ですがリージョン2番に触れずに落とし穴に落ちるとX座標もY座標も0なので壁にめり込みます。


■コモンイベント1番にイベントを組みます。
条件分岐のスクリプトはthis.jump($gameVariables.value(1) - this.x, $gameVariables.value(2) - this.y)


条件分岐の意味は今いるプレイヤーの位置からリージョン2番までの相対距離を計算するというものです。詳しくは割愛します。

■コモンイベント2番に↓のイベントを組めば出来上がりです。



web拍手 by FC2
[ 2017/09/08 14:55 ] RPGツクールMV | コメント(0)

【ツクールMV】4つのオーブの色が揃うと道が開く

↓のようにイベントエディターにイベントを組みます。


向きで判定するので今回使う画像は!Other1のオーブですね。


実際に実行する内容です。



見切れている条件分岐です。コピペして下さい。
this.character(31).direction() == 8 && this.character(32).direction() == 8 && this.character(33).direction() == 8 && this.character(34).direction() == 8

出来上がったイベントを3つコピペして全部でオーブが4つ出来るようにして下さい。


オーブのイベントIDを設定する必要がありますので↑の条件分岐の青い数字のところをそれぞれ4つのイベントのIDに変えてください。

this.character(31).direction() == 8 というのはイベントID31番の向きが上という条件分岐です。下は2、左は4、右は6、上は8という値に設定されています。

画像は上から順に下、左、右、上という順番で並んでいるので
新規キャンバス6

今回は全てが8なので全部青いオーブにするとイベントID36番が消えて道がひらけます。

web拍手 by FC2
[ 2017/09/06 01:35 ] RPGツクールMV | コメント(0)

【ツクールMV】シナリオ達成度を表示してみよう

シナリオを達成するごとに☆マークを追加させてみましょう。

変数を2つ用意します。
1つはシナリオ達成度、もう1つはシナリオ達成加算としておきます。

↓のようにコモンイベントを作成します。☆を増やしたい数だけ条件分岐を増やしてください。


次はストーリーが進んだときにシナリオ達成加算に+1をして、先程作ったコモンイベントを読み込ませます。


今はシナリオ達成加算には1が入っているので☆が1つ表示されます。シナリオを5つ達成したと仮定して5回シナリオ達成加算に+1してみましょう。その後に↓のように文章の表示で変数の内容を表示してみます。変数113番というのはシナリオ達成度のことですね。1番の変数を使っている場合は\V[1]となります。


↓のように表示されます。


このやり方のメリットはいろんなイベントが散らばってるゲームでどこからクリアしても☆の数を1つずつ増やせることです。ボスを倒す順番が決まっていないゲームで直接、変数に文字列を代入してしまうと倒す順番によって☆の数がめちゃくちゃになってしまうのを防ぐためです。

web拍手 by FC2
[ 2017/09/05 00:45 ] RPGツクールMV | コメント(0)

【ツクールMV】敵イベントの座標拡大方法(並列処理限定)

アクションRPGの基本ですが逃げゲーとかにも使えます。

以前、記載した内容では並列処理の中で変数やスイッチの処理を使うと、とてつもなく重くなってしまうというデメリットがありました。これは変数やスイッチが変更されるたびにそこのマップに存在するイベントの出現条件に対してのリフレッシュが行われるためです。例えば並列処理の中で変数1に+1を代入するという処理をする場合、大きなマップを作ってイベントをたくさん配置するとその一つ一つに対して1秒間に60回というリフレッシュが発生します。大きなマップで処理落ちする原因の一つがこのリフレッシュにあるわけです。なので敵の座標を取得するために毎フレーム変数に位置情報を代入するというのはタブーになるわけです。

ではどうするのかというと、位置情報を変数に代入できるということはその位置情報を管理しているところがあるということです。変数に入れて参照するのがダメなら最初の参照元で計算するようにすれば変数を使わない以上、リフレッシュは行われないということになります。
以下、そのスクリプトになります。イベントのトリガーを並列処理にして下さい。
上から順に右範囲、下範囲、左範囲、上範囲の座標を拡大する。

if((this.character(0).x +0.0) >= this.character(-1).x
&& (this.character(0).y +0.0) >= this.character(-1).y
&& (this.character(0).x -0.0) <= this.character(-1).x
&& (this.character(0).y -0.0) <= this.character(-1).y){
this.setupChild($dataCommonEvents[1].list, this._eventId)
}


上のスクリプトの場合、イベントとプレイヤーが接触するとコモンイベント1番を処理するという内容です。スクリプトなのでいろんなプラグインと併用することも可能です。0.0という数値を大きくすると大きくした分だけ接触範囲が大きくなります。



イベントの実行内容を以下の通りに設定します。起動条件(トリガー)は並列処理です。
まず変数を4つ用意します。私の場合は1000番台の変数を使っていますが番号はどれでも良いです。

新規キャンバス6

上から順に説明します。

$gameVariables.setValue(1015,this.character(0).x +0.0)
$gameVariables.setValue(1016,this.character(0).y +0.0)
$gameVariables.setValue(1017,this.character(0).x -0.0)
$gameVariables.setValue(1018,this.character(0).y -0.0)


このスクリプトはマップ上のイベントの座標を取得するためのものです。
元々の形は$gameVariables.setValue(変数番号,数値)ですね。イベントコマンドで処理をすると変数を取得してそこに座標の変更というような二度手間が発生するので、今回は出来るだけ短くという形をとるためスクリプトで一括して代入しています。

次が取得したデータからの座標判定です。
座標判定は条件分岐を使います。HalfMoveを使っているので判定は半歩ごとになっていますので1マス48pxの半分で24pxごとです。デフォルトが半マスなので当たり判定を大きくしたい場合はスクリプトの値を変える必要があります。

例えば右に当たり判定を大きくしたい場合は1015番の変数なので
$gameVariables.setValue(1015,this.character(0).x +2.0)
という感じで大きくできます。

肝心の条件判定のスクリプトですが
$gameVariables.value(1015) >= this.character(-1).x && $gameVariables.value(1016) >= this.character(-1).y && $gameVariables.value(1017) <= this.character(-1).x && $gameVariables.value(1018) <= this.character(-1).y
となっています。このままコピペして条件分岐のスクリプト欄に入れて下さい。

後は接触したときの判定を各自で好きなように入力して下さい。

※注意点

座標を拡大する場合、どこからが基点になるのかな?と考える人が多いかと思います。答えは下の真ん中48pxの中心です。


ツクールのシステムではあくまで判定は1マス単位です。プライオリティを通常キャラと同じにして接触してみればわかると思いますが$を付けた大きなファイルの場合当たり判定が真ん中に来ることはありません。必ずキャラクターの下のマスに接触範囲がくるので拡大する場合は間違いのないようにしましょう。

$gameVariables.setValue(1015,this.character(0).x +1.0)
$gameVariables.setValue(1016,this.character(0).y +0.5)
$gameVariables.setValue(1017,this.character(0).x -1.0)
$gameVariables.setValue(1018,this.character(0).y -1.5)

↑こんな感じにすると良さげです。


web拍手 by FC2
[ 2017/09/02 15:10 ] RPGツクールMV | コメント(0)

【ツクールMV】歩数カウントで爆発させてみよう

コモンイベントに↓の内容を入力します。


マップにイベントを配置してスイッチ1番をONにします。


10マス歩くと無事爆発してゲームオーバーになることができます。やったね☆

web拍手 by FC2
[ 2017/09/02 11:45 ] RPGツクールMV | コメント(0)

RPGツクールMVにおけるデータベースの限界値

全部2000かと思ったらそうでもないんだね。
作れるマップの最大値っていくつ?

アクターの:1000
職業の:1000
スキル:2000
アイテム:2000
武器:2000
防具:2000
敵キャラ:2000
敵キャラグループ:2000
ステート:1000
アニメーション:1000
タイルセット:1000
コモンイベント:1000
タイプ:属性:99
タイプ:スキルタイプ:99
タイプ:武器タイプ:99
タイプ:防具タイプ:99
タイプ:装備タイプ:99

web拍手 by FC2
[ 2015/12/12 02:27 ] RPGツクールMV | コメント(0)