ページ 1 / 1
【解決済】ゲーム内変数を5000個を超えて使用する方法はありますか?
Posted: 2016年6月26日(日) 18:04
by スズミ
質問失礼致します。タイトルそのままです。
ツクールmvでは標準でゲーム内変数を5000個まで使えますが、
その最大数5000個を超えて使用する方法はありますでしょうか?
初歩的な質問でしたらすみません!
当方スクリプト知識は皆無で、配布して下さる方のものをお借りする形で
他は極力変数・スイッチ・イベントを使用してゲームを制作しております。
そこで、現在制作しているゲームなのですが、細かいキャラメイクを主体にしており
キャラクター1人1人に付属する情報(外見情報・隠しパラメーター、他諸々)を
全て変数に格納する形で管理しています。
その結果、キャラ1名につき100個近くの変数枠を割いてしまっている状態です(+ +;)
仮にキャラメイク可能人数を20人としても、100×20で2000個の変数を使用してしまい
他のシステムに割く部分を加味すると、5000個以内に収まるかどうか少々不安です。
解決できるスクリプト等も探しておりますが、まだ見つけられておらず
こちらで質問させて頂きました。
もしシステム上難しい問題でしたら諦めて、キャラ作成可能人数を少なく制限し対応しようと考えております。
解決策をご存知の方いらっしゃいましたらご教授頂けますと幸いです。
よろしくお願い致します。
Re: ゲーム内変数を5000個を超えて使用する方法はありますか?
Posted: 2016年6月26日(日) 22:38
by yamachan
スズミさん、こんばんは
適したプラグインが見つかると良いのですが、もし見つからなかったときのための意見を書きます。
つまりは標準機能 + 決まったカスタムスクリプトによる実装です。
キャラ毎に100個のパラメータがあるとのことですが、 たぶん常に使用する値と、たまにしか使用しない値があるとおもいます。
たとえば1キャラに使用できる変数を最大20個としますと、19のパラメータはそのまま変数に格納し、残りの81個は1つの変数にまとめてしまいます。
81個を1つの「配列」として変数に代入します。
変数 No 100~120 までを最初のキャラ用の変数としましょう。
100~119 までの変数はこれまで通り使用してかまいません。
しかし変数120だけは以下のように初期化します。 (英語版でスイマセン)

- 001.png (8.56 KiB) 閲覧された回数 12980 回
これで変数120は空の配列になりましたので、スクリプト入力で以下のように配列の中身を代入していきます。

- 002.png (3.05 KiB) 閲覧された回数 12980 回
この方法でいつでも配列の中の値を自由に設定できます。
この時に 100 などという値ではなく、$gameVariables._data[5] を指定すれば、変数5の値を保存できます。
そして実際にその値を使いたい場合には、以下のように変数に値をコピーしてゲーム中で利用します。
例えば変数5に、キャラ1用の120番配列の1番目の値をコピーするには以下のようにします。

- 003.png (9.15 KiB) 閲覧された回数 12980 回
以上、自身でスクリプトを記述するのは大変だとおもいますが、2~3ほどの決まった書き方に慣れるだけで、数多くの値を操ることができるようになります。
もしよかったら挑戦してみてください。
p.s. あ、いま思いつきましたが、ある範囲の変数値を全部、ひとつの変数にパック/アンパックするプラグインコマンドなら作れそうな気がします

Re: ゲーム内変数を5000個を超えて使用する方法はありますか?
Posted: 2016年6月27日(月) 00:01
by yamachan
というわけで、試しにプラグインを作成してみました。
↑のよくわからない説明を書くより、プラグインを書いてる時間のほうが短かかったという罠…
連続した変数を配列にまとめ、1つの変数の値として保存する pack プラグインコマンドと、
配列に保存した値を連続した変数に戻す unpack プラグインコマンドを作成してみました。
RTK_VariablePacker.js
https://raw.githubusercontent.com/yamac ... ePacker.js
1キャラが100のパラメーターを持つとしても、一緒に冒険するのは4人ですよね?
であればゲーム中の変数は 100x4 = 400 個あれば足りるはず。
ここでは 100~499 までを使うと仮定しましょう。
で、キャラの数だけ、つまり20個の保存用の変数を用意します。
ここでは500~520 までを使うと仮定しましょう。
ルイーダの酒場?的な場所で、パーティの先頭キャラを外すとしましょう。
キャラとしては5番目に追加されたとすると、保存先は 504 番の変数です。
以下のようにプラグインコマンドを指定します。
コード: 全て選択
VariablePacker pack 100,100,504 // 100の変数から連続100個を504に保存
かわりに6番目に追加されたキャラ (保存変数は505) をパーティ先頭に復元するとしましょう。
(復元のときは要素数はもうわかっているので指定しません)
以下のようにプラグインコマンドを指定します。
コード: 全て選択
VariablePacker unpack 505,100 // 505変数より100~に復元
以上、シンプルすぎる機能なのでアレですが、よかったら活用してみてください。
ではでは。
Re: ゲーム内変数を5000個を超えて使用する方法はありますか?
Posted: 2016年6月27日(月) 00:47
by 名無し蛙
お疲れ様です。
基本はyamachanさんが言う通りエディタで設定出来ない事は
イベントコマンド>「スクリプト」や「プラグインコマンド」で設定するのが正しいのですが
一つ抜け道があるのでご紹介しておきます。
まず上限5000という数値に意味はありません。
目分量で設定された上限なんで明確な目的さえあれば5000以上の変数を扱っても問題無いと思います。
そして5000という上限値は「最大数の変更」に掛かっている制限なので
これ以外の方法で最大数を設定すれば5000個以上の変数をエディタ上で扱う事が出来ます。
具体的な事を言えば以下のコードをイベントコマンド>スクリプトにコピペしてテスト起動、実行してみてください。
コード: 全て選択
var fs = require('fs');
for (var i = 0; i < 1000; i++) {
$dataSystem.variables.push("");
}
var path = StorageManager.localFileDirectoryPath();
path += '/System.json';
fs.writeFile(path, JSON.stringify($dataSystem));
saveフォルダの中に
System.jsonというファイルが吐き出されると思います。
これを念の為
バックアップを取った上でdataフォルダにあるSystem.jsonと差し替えてください。
そしてエディタを一回閉じて起動しなおすと変数上限が1000増えてると思います。
for (var i = 0; i < 1000; i++) {の1000の部分を変えればその分だけ上限が変わります。
常識的な範囲で増やす分には特に問題無いと思いますが言うまでもないですが仕様外の裏技です。
プログラムには無限という物は存在せずリミッターを超えたデータ操作は突然ガタが来る恐れがあります。
実行は自己責任という事でバックアップを忘れずに。また過分に確保するのもやめた方が良いでしょう。
追記で。9999までは問題ないと思いますが
10000以上は5桁の数値を扱う事を想定していない都合で若干表示がおかしくなります。
Re: ゲーム内変数を5000個を超えて使用する方法はありますか?
Posted: 2016年6月27日(月) 02:06
by スズミ
yamachan様
画像つきの丁寧な解説を頂き感謝です!
わざわざプラグインまで組んで下さって嬉しい限りです…!
まず一つ目の解説の通りにmvでイベントを組みテストを行ったところ、
1個の変数に複数の値を配列としてを格納⇔そこから復元
できることを確認しました。
またプラグインの方も導入させて頂き、動作確認してみたところ
こちらも問題なく値を復元することができました。
普段使用されない隠しパラメーターがほとんどだったため、
教えて頂いた方法で変数最大数の問題は解決しそうです。ありがとうございます!
Re: ゲーム内変数を5000個を超えて使用する方法はありますか?
Posted: 2016年6月27日(月) 02:08
by スズミ
名無し蛙様
ご返信頂きありがとうございます。
解説頂いた通りにファイルを置き換えてみたところ、エディタ上で扱える変数の最大値が増えているのを確認しました。なにこれすごい…!(笑)
該当するプラグインがなかなか見つからなかったため、システム的に厳しいのかな?とか、
5000個以上は流石に使いすぎ?とか色々考えていたところです。あくまで目安の数なのですね。
またこちら仕様外の抜け道的な方法ということですので、その点を踏まえた上で、無理のない範囲で使用を検討しようと思います。
お二方から迅速なご返信を頂きとても助かりました。
自力ではなかなか解決しなかったと思います…お答え下さりありがとうございましたm(_ _)m
Re: 【解決済】ゲーム内変数を5000個を超えて使用する方法はありますか?
Posted: 2016年6月27日(月) 02:44
by yamachan
こんばんは!
お役にたてたなら幸いです。
いやしかし、名無し蛙 さんの裏技すごいですね。
上限を超えた値に、エディタがちゃんと追従してくれるのにも驚きです。
ではでは。