ページ 11

CACAO SOFT様「アイテム合成」スクリプトのレシピの初期化について

Posted: 2018年8月28日(火) 01:52
by リングル
こんにちは、初めての質問となります。
ツクール初心者です。

CACAO SOFT様のアイテム合成スクリプトを使用したゲームを配布しようと思っています。
後に続きを配布し、その際、アイテム合成のレシピの追加・変更なども行おうと考えています。
しかし、CACAO SOFT様アイテム合成スクリプト詳細のページの最後に

■レシピの初期化 $game_imrecipes.init
レシピやレシピブックのデータを変更した場合に実行してください。
ロードゲームを行った際に問題が発生する場合があります。

と記されていますが、どのように実行、また、どのようなタイミングで実行すればよいのかわからなくて困っています。
ゲームの配布含め、スクリプトを扱うこともまだ不慣れなのでとても困っています。

どなたか解決法をご存知の方、ご指導いただけませんでしょうか。
よろしくお願いします。

Re: CACAO SOFT様「アイテム合成」スクリプトのレシピの初期化について

Posted: 2018年8月30日(木) 12:00
by 奈々(なな)
はじめまして、こんにちは。

まず、セーブデータの互換性を無くす。というのも1つの選択肢です。
「続き」というのが続編や大きなアップデートのことなら特にです。

そうでない場合は、ゲームバージョンの管理をすることになります。
以下に一番簡単そうな方法を紹介します。


まず、変数を1つ用意します。「バージョン管理」とします。
ゲームの一番最初に、この変数に「1」を代入します。

次に、コモンイベントを1つ作ります。
条件分岐で「バージョン管理」が「1」以外なら
レシピの初期化を行うようにします。
普通は、このイベントは何もしないイベントです。

そして、ゲームを配布した後にゲームの内容を変更したら
「1」を「2」に変えておきます。
すると、古いセーブデータをロードした場合
「バージョン管理」には「1」が入っていますので
コモンイベントを実行するとレシピの初期化が起きるようになります。


後はこのコモンイベントを、レシピを使うイベントの前に呼び出すか
並列処理等で定期的に呼び出すようにします。

並列処理については、以下を紹介しておきます。
http://heptanas.mamagoto.com/Entry/8/

Re: CACAO SOFT様「アイテム合成」スクリプトのレシピの初期化について

Posted: 2018年8月30日(木) 20:48
by リングル
奈々様、ご回答ありがとうございます。
ご丁寧に解説していただけたので、ほとんどの疑問が解消されました。
奈々様のサイトも参考にさせていただきます。
本当にありがとうございました。
ゲーム内クレジット表記にて、奈々様のお名前を記載させていただきます。


追加質問となりますが、新たに疑問が生じましたのでここに記しておきます。
どなたからでも、ご回答いただければ幸いです。


質問本文中の「続き」というのは、マップ追加、イベント追加、データベース追加と変更、
画像素材の追加を含めたデータの追加のことを指しました。
(スクリプトは変更や追加せず、変更点はアイテム合成スクリプトのレシピ追加・変更のみ)

そこで、「セーブデータの互換性を無くす」というのは具体的に
どのような処理を入れると互換性がなくなってしまうのか疑問です。
調べ方が悪いのか、うまく情報が見つけられませんでした。

作製中のゲームの性質上、出来る限り互換性を残して配布したいと考えています。

Re: CACAO SOFT様「アイテム合成」スクリプトのレシピの初期化について

Posted: 2018年8月31日(金) 06:33
by 奈々(なな)
ありがとうございます。
ご理解頂けたようで何よりです。

追加の質問に関してですが
ざっくり言うと「セーブデータに記録されるもの」に関して
「辻褄が合わなくなるもの」があると互換性がないと言えます。

セーブデータに記録されるのは
アクターの状態や、所持アイテム、変数・スイッチの状態、現在位置などです。
(基本的には何かしらの「状態」を記録すると考えて下さい。)

スクリプトについては、内部的にどう処理しているかによりますが
ゲーム中にオンオフや設定を切り替えられるものは、
セーブデータに記録させている可能性が高いですね。


解説が少ないのは、正確な理解にはスクリプトの知識も絡んでくるのと
全てのケースを解説しようとすると膨大な量になるからだと思います。
質問本文中の「続き」というのは、マップ追加、イベント追加、データベース追加と変更、
画像素材の追加を含めたデータの追加のことを指しました。
(スクリプトは変更や追加せず、変更点はアイテム合成スクリプトのレシピ追加・変更のみ)

これに挙げられたものに限定して、なるべく簡単に説明します。


・マップ追加
マップはセーブデータに含まれないため、基本的に問題ありません。
但し、マップを追加すると、移動を含めて必ずイベントを追加するはずなので
そちらの整合性の問題があります。

・イベント追加
内容次第です。例えばお店や会話を追加するくらいなら、マップ追加と同じです。
スイッチや変数を操作する、アイテムを取得する等の操作を絡める場合
セーブデータを引き継ぐとそれらの操作がすっぽ抜けているケースがあるため
例えば後々そのスイッチやアイテムがないと「詰む」状況があるなら互換性がないですね。

・データベース追加と変更
データベースの中身もセーブデータには含まれません。
ですから追加と性能変更は基本的に問題ありません。しかし例外もあります。
まず全般に、IDで管理されているため、別物にするなど大幅な内容変更は避けるのが無難です。

またアクターの状態はセーブされるため、アクター絡みのものは注意が要ります。
例えばクラスの取得スキルを変更しても、既に取得済みのスキルは変わりません。
装備状態もセーブされているので、初期装備等はすっぽ抜けますし
装備カテゴリーの変更等は不正な装備などが起きる可能性があります。
逆に特徴や能力値はセーブに含まれていないので、変更が適用されます。

それからタイルセットで通行設定を弄ると、現在位置によっては移動不能になります。
初期メンバーの増減も、現在のメンバーには影響を与えないので注意が要ります。

・画像追加
追加だけなら問題はないですが、実際はそれに伴う「変更」があるはずです。
画像に関してはセーブデータに含まれていないので問題ありません。
と言いたいところですが、スクリプトによっては画像ファイル名をセーブしている処理もあります。

・バグ修正(修正前の書き込みにあったので)
「バグ」の「修正」というのはあくまで人間目線であり、結局はイベント変更と同じです。
例えばイベント進行度という変数に関してバグがあったとします。
イベントのページ条件や条件分岐が間違っていたなら、修正は問題ありません。
変数への値操作が間違っていたなら、変数の値はセーブされているので、修正してもバグは残ります。

・レシピ追加、変更
変更→特に問題なし。考え方はデータベースと同じ。
追加→数が変わる場合は初期化が必要。


結論としては、まずセーブデータに何が含まれているのか理解が必要ですし
行った変更がどういう影響を与えるのかを「あり得るケースを全て想定」する必要があるため
変更点が多い場合は互換性を保証しないと断る場合が多いわけです。

例えば、公開から3回バージョンアップをした場合
過去3回分のセーブデータに関して、互換性を保証するのはかなり大変ですよ。

例外としては、新マップを追加して、イベントやデータベースの追加も
全て新マップ上でしか扱わないというような独立性の高い追加なら
管理しやすいため、大型の変更でもセーブデータの互換性を保証しやすいです。
(いわゆるDLCが、良くこの手法を取っていますね)

Re: CACAO SOFT様「アイテム合成」スクリプトのレシピの初期化について

Posted: 2018年8月31日(金) 20:31
by リングル
奈々様、再びの回答、本当にありがとうございます。
ここまで詳しく解説していただけたので、今までわからなかったことがよく理解できました。
修正前の分までご丁寧にありがとうございます。

互換性を維持するのはこんなにいろんな事を考えなくてはならない
とても大変なものだったのですね・・・

今回教えていただけた知識を足掛かりに、セーブデータに関わっていそうなスクリプトを
読み解いてみようと思います。
(この機会にと、スクリプトの勉強も始めました。
・・・が、一人前にスクリプトを書けるようになるのはまだまだ先になりそうです)

どうしても互換性を維持できなさそうであれば、互換性の維持は諦めて
配布する方(数人のみ)へ個別に対応などを行おうと考えております。

数人のみへの配布ですが、初めての配布に向けて作成を頑張ろうと思います。

本当に、本当にありがとうございました!