最終更新日 2024-09-25

フラグ

ScenarioModで読み書きするフラグとしては主として2系統がある

Set_フラグ(...)、Get_フラグ()、Delete_フラグ()

下記にて説明するもので、セーブデータに保存されます

拡張セーブデータを使う方法

拡張セーブデータ にて解説されています。

セーブデータにも反映されるScenarioMod独自で使えるフラグ管理

主にご自身で独自イベントの進行具合を管理する目的で使用することが多いと思われます。

int Set_フラグ( string フラグ名, int フラグ値, int フラグ枠) // フラグ値の設定
int Get_フラグ( string フラグ名, int フラグ枠) // フラグ値の取得
int Delete_フラグ( string フラグ名 ) // フラグ解放(フラグ消滅。ゴミ掃除)
永続データに対して使うことセーブデータに保存する必要がないフラグにこれらのAPIを使わないこと!!
スピードが遅くなるだけです!!
ゲームを終了して、セーブデータからロードする際に、値を復活させる必要があるデータに対してのみ利用すること。
その必要がないフラグは普通に高速なC/C++の変数で管理してください。
フラグを0で初期化しないこと 全てのフラグは0で初期化されているので、わざわざSet_フラグで初期値を設定する必要がありません。
(初期化してしまうと、実際にはそのフラグを利用しなかったとしてもセーブデータに残ってしまうので注意。)

Get_フラグとDelete_フラグは、存在しないフラグ名を問い合わせると、「0」という値が返ってきます。

フラグはセーブデータへと保存されるため、無限数ではありません。
ScenarioModや一般Modで「セーブデータ1スロットあたり合計で3000ラベル」使うことが出来ます。
(セーブデータのスロットとは、下図の赤い四角。8つのスロットがある。)


一般のフラグで連想するものとは異なり、ScenarioModでは、より高度なフラグ機能を有しており、
「1つのフラグ名で9つの値」を管理することが出来ます。

概念図は以下。

1つのフラグに対して9つの値を持てる

1つのフラグ名に、普通の数値を入れられる「メイン枠」、TRUE/FALSEのみを入れられる「A枠~H枠」の合計9つの値が管理できる。


これにより、非常に大きな、隔年に渡るようなイベントであっても、複数のフラグ名を使うようなことは無く、
1つのフラグ名で、管理できます。
(イベントが進んでいくごとに、A枠をtrue、B枠をtrue、... という形で8段階まで1つのフラグ名で簡単に管理できる)

フラグ名が迂闊に他者と被らないように、フラグのラベルの最初の3文字程度はご自身のハンドル的な名前を付けておきましょう

フラグの設定

int Set_フラグ( string フラグ名, int フラグ値, int フラグ枠) // フラグ値の設定
Set_フラグ("TJP_EV01", 23 ); // フラグ名"TJP_EV01"のメイン枠に23という値を入れる。
Set_フラグ("TJP_EV01", TRUE, フラグ枠::C ); // フラグ名"TJP_EV01"のC枠にTRUEを入れる。
  

フラグの取得

int Get_フラグ( string フラグ名, int フラグ枠) // フラグ値の取得
 /* 存在しないフラグ(Set_フラグしたことが無いフラグ)名を問い合わせた(Get_フラグした)際はFALSE(=0)が返ってくる。 */
 
//フラグ名"TJP_EV01"のフラグ枠::メインに23という値が入ってるか? 比較演算子を省略しないこと。
if ( Get_フラグ("TJP_EV01") == 23 ) {
  // ~
}
 
// フラグ枠::A~Hについては、TRUE/FALSEと比較する。
if ( Get_フラグ("TJP_EV01", フラグ枠::C ) == <font color="red">TRUE</font> ) {
  // ~
}

フラグの解放(消滅・ゴミ掃除)

int Delete_フラグ( string フラグ名 ) // フラグ解放(フラグ消滅。ゴミ掃除)
	  // フラグ名はScenarioMod、一般Modでみんなで共通で使って3000個まで。いわば共通資源。<br>
	  // セーブデータにフラグ状態を保存する必要がなくなったら、不要になったら消滅・解放すること。
	  Delete_フラグ("TJP_EV01");
  

より詳細を知るには...

「フラグ」に関する主な所は以上となります。 詳しくは「フラグ情報型.h」などを参照してください。