RPGツクール、スクリプトのススメ
2019/05/15
こんにちわ!yatsureです。
コモンイベントを駆使するな、とリスナーさんに言われて居ました
ニコ生しながら、モンスター合成RPGをコモンイベントベースで創っていたら、結構やめとけというコメントをもらった気がする。
その度に
ウッセーんだよハゲチャビンどもが!!コモンイベントが至高だっつってんだろが!!
と、おもてなしの心を持って返答して居ましたが、プログラミングを少し嗜んだ今、一つの真実に気づきました。
\\コモンイベントはクソ//
何がどうクソなのか、コレは正直プログラミングがわかる人じゃないとわからないと思うので、結論だけ伝えておきます。
繰り返します。コモンイベントはクソ
大事なことなので二回言っちゃいましたが、とは言えそんなに悪いものではないですよ。
なんなら、僕はコモンイベント+変数とプログラミング、両方使ってます♨︎
いや、お前なんなんだよって感じがしなくもないですが、救心差し上げるんで落ち着いてください。
コモンイベントって駆使すると、動きがやばくなるじゃないですか。5MB以上になるとアツマールに怒られるし、
ツクールネイティブのバグのせいか何度コモンイベントジェイソンが0kbになったことか・・・
なので、プラグインというか、スクリプトを使って、コモンイベントみたいなものを創って行こうと思います。
スクリプトとは?
RPGツクールも、その辺のソシャゲーも、紐解くと全部プログラミングで動いて居ます。
とはいえ、プログラミングとか意味わかんないじゃないですか。
あんなもん、コミュ障の根暗共に任せておけば良いと思うじゃないですか。
全面的に賛成です。
なんですが、結構アレって便利なので、使ってみません?
プログラミングはただの手段
ぶっちゃけコモンイベント+変数とプログラミング、どっちもただの手段です。
繰り返しますが、なんなら私は両方使ってます♨︎
なんでわざわざ両方使っているかというと、単純にそのほうが僕にとって便利だからです。
じゃあ、どう使い分けているか、なんですが
・計算、条件分岐、ループをプログラミングで記述する
って感じです。
例えば僕は、モンスター合成システムを作るときに、そのモンスターが何属性かを調べる必要があります。
僕はモンスターのアクターIDの数字に意味を持たせたました。
例えばアクターID001は炎属性、011は氷属性、005は炎属性、041は土属性と言った感じで
10の位がなんの数字かによって、属性を判断して居ます。
ここで欲しくなる処理は、アクターIDを入力したら、属性番号(ここでいうと0とか4という数字)だけ返ってくる処理です。
変数1に011って入れたら変数2に1が代入される、
変数1に013って入れても変数2に1が代入される、
変数1に041って入れたら変数2に4が代入される、
と言った処理があったら楽ですよね。
例えば、アクターID_011 と アクターID_015 が、同じ属性かどうかを判定したい時とかね。
まぁ、コモンイベントで作れるんですけどね♨︎
じゃあ、ここで問題です。
属性の組み合わせが1と4だった場合、属性7のモンスターが生まれる、という処理はどう作ったらいいでしょうか?
これのミソは、一体目が1、二体目が4の時は勿論、その逆、一体目が4、二体目が1だった時も同じく7が生まれるようにする、
という点です。
そして、問題なのはこの特殊な組み合わせはコレだけではない、という点です。
2と3で8が生まれる、という条件も、後々加えたいと思うだろう、という事です。
さて、作れますか?
コレはロジック、いわゆる論理問題です。
恐らく、ツクールで合成系ゲームが少ないのは、この辺りの難易度が高い事が原因かと思って居ます。
愚直に作ると、やばい作業量になります。
じゃあ1+4=5、4+1=5だから、合計が5を条件分岐して7にすればいいんだ!と思った方は、なかなか素敵ですが、三角です。
なぜなら2+3も5だからです。
ところで、私はコレをコモンイベントで作った訳なんですが、どうやったと思いますか?
アホな私はアホなので
一体目の属性の3乗と二体目の属性の3乗を足したら結果65なら、1と4の組み合わせ、という事にしよう♨︎
として、三乗して合計するコモンイベント作り、条件分岐で判定して居ました。クソワロ。
案の定、どうやら組み合わせによってはバグがあったみたいですが、概ね動いてたしよくね?みたいな
コレ、スクリプトで書けば、ちゃんと条件分岐出来るんですよ。
例えば、僕が思う条件分岐は
一体目属性と二体目属性 と言う文字列で条件分岐できれば、他とかぶることが無い、と思います。
つまり
1と4
と言う文字です。
一体目が1、二体目が4の時
自動的に属性の数字の間に「と」を挟んでくれて
1と4
と言う文字を作ってくれて、条件分岐に
もし作られた文字列が「1と4」だったら7にする
と言った内容が書けたら最高だと。
当然
一体目が4、二体目が1でも
1と4
と言う文字を作ってくれると言う事が必須です。
コモンイベントでは、そもそもそんな条件分岐が作れませんが、プログラミングは可能なんです。
//ツクールの変数1には1、変数2には4が入っているとする。
function get_gouseikekka(){
// 以下、ittaimeは変数1の中身、nitaimeは変数2の中身として扱う儀式
var ittaime = $gameVariables.value(1);
var nitaime = $gameVariables.value(2);
// 結果を入れる変数を宣言。特定の組み合わせじゃなければ一体目と同じ属性になる。
var kekka = ittaime;
// zokuseimojiは、1と4 と言う文字列を作るための変数宣言
var zokuseimoji = "";
// zokuseimojiに"1と4"と言う文字を入れる
zokuseimoji = ittaime + "と" + nitaime;
// もし、一体目が4の時を考え、一体目の数字が二体目より大きい場合は逆で文字を作る
if (ittaime > nitaime) {
// ittaimeが4、nitaimeが1だった時は、コレで"1と4"になる
zokuseimoji = nitaime + "と" + ittaime;
}
// zokuseimojiが"1と4"だったらkekkaに7を入れる
if (zokuseimoji === "1と1") {
kekka = 7;
}
// zokuseimojiが"2と3"だったらkekkaに8を入れる
if (zokuseimoji === "2と3") {
kekka = 8;
}
// ツクールの変数3に、kekkaの中身(この場合7)を入れる儀式
$gameVariables.setValue(3,kekka);
}
こんな感じで書く事が出来ます。
コレをテキストで書いて、ファイル名をtest.jsとかにしてツクールのpluginsフォルダにぶち込んで、プラグインをオンにして、
実際使う時はツクールのイベントの「スクリプト」って奴を呼び出して、中身に
get_gouseikekka();
と書いておくだけで、その時点のツクール変数1と変数2を使って、結果を変数3に入れといてくれます。
これの良いところは、こんな感じで条件分岐出来る内容が広がるのと、
あとあと処理を見返したときに、何をやっているかコモンイベントよりわかりやすい点です。
プログラミング言語、と言うだけあって読み方を知らないと、ぶっちゃコモンイベントより何をやっているかわっかんね!!って感じですが。
だってコレ、みてください。
var ittaime = $gameVariables.value(1);
コレ、要は $gameVariables.value(1) って奴が変数1と同じ意味なんですが、こんなん覚えてらんないじゃないですか。
なので僕は
function get_hensu(id) {
return $gameVariables.value(id);
}
と、どっかに書いちゃって、次からは
var ittaime = get_hensu(1);
と書けるようにしちゃいます。
はぁ?
って感じですよね。
コレってjavascriptっていうプログラミング言語の書き方なので
もし、上記の読んで
「ちょっとスクリプトって未来があるかも知れないけど、訳がわからん」
と思った方は、是非コメントください。
僕がスクリプトの書き方、使い方を記事にするかも知れません。
と言った感じで、また明日とか!!