よく、フラグという言葉を聞き&使いますが
結局フラグとはなんなのでしょうか?
分かり難い説明ですが読んで見て下さい(苦笑)


フラグの語源は「フラッグ=旗」と言われています
フラグが「立つ」というのは語源が旗だからですね
ある程度ゲームが進み、次にイベントなどを起こす時に
そのタイミングを示す目印という事で旗なんだとか・・・


ゲーム中でのフラグには大きく分けて2種類あります
1つは「01010101」そしてもう1つは「FFFFFFFF」です
特殊なフラグでは無い限り
01010101とFFFFFFFFのどちらかを使いますが
FFFF〜の方が難しいのでこっちを重点的に説明します


一応こちらも説明をします
「01010101」
と書き込まれる方ですが、これは動作も簡単で
普通に01をsbでストアして立てています
おまけ要素などでこの形式のフラグを使った場合
01で1つのオマケが出現します
つまり01010101では4つ出現するという事です
実際に使われたゲームを例に挙げると
BITTERSWEET FOOLS
ニンジャアサルト
などがあります。


しかし、このページの説明のメインである
FFFFFFFF
というタイプのフラグは動作が特殊です
01010101で4つ出現するオマケも
FFFFFFFFならば32のオマケが出現します
何故こんなに出現数に違いが出るかと言うと
Fという1ケタの数値が「1,2,4,8」の
4つの数値(フラグ)で構成されているからです

FFFF〜はほとんどのゲームで使用されます。
AIR
鬼武者2
デビルメイクライ
ビートマニアUDXシリーズ
ファイナルファンタジー10(インター)
などなど・・・


AIRで使用されていますのでこれを例に説明すると
1ならば1枚目のCGのみ入手
2ならば2枚目のCGのみ入手
4ならば3枚目のCGのみ入手
8ならば4枚目のCGのみ入手
となります。

もし1枚目と2枚目のCGを同時に入手したい場合は
1+2=3で、3を入力すれば入手出来ます
同じように、2枚目と4枚目を同時に入手したい場合は
2+8=Aで、Aを入力すれば入手出来ます
4枚全てを入手したければ1+2+4+8=Fになります
つまり、この4つの数値を組み合わせて
その合計値によってCGのフラグが立つと言う事です。

Fが1ケタで4つのフラグを管理しているので
「FFFFFFFF=32個のフラグが立つ」という事になります
プログラム内ではこのフラグを立てる時には
or命令(論理和)を使用して計算します

「そんな普段聞かない様な原理を使わなくても
普通に数値を加算すれば良いじゃん」
と実際に言われた事があるのですが(笑)
普通に加算すれば3で2枚のCGがある時に
1を加算すると4=3枚目のCGのみになってしまいます

しかし、この論理和は
「4つのフラグのどれかがすでに存在していれば
同じ数値は増やさない」という物です
つまり3に1か2は絶対加算しないという事です
もっと詳しく書くと微妙に難しくなりますが

トップのR5900命令表にも書いてある通り
論理和などはビット演算、つまりビット単位で計算します
ぞれぞれ、1,2,4,8を2進数(ビット)で表すと
1=0001
2=0010
4=0100
8=1000
になります。
鋭い人は見た瞬間に気づいたと思いますが
4ビット中同じケタに1は存在せず
しかもどの数値も1が1つしかありません

「すでに存在していれば同じ数値は増やさない」
これは「ビット上に1が存在すればそのケタは無視」
という事になります、なので
3=0011には1=00012=0010
は加算されず無視されるという事ですが
逆に1が無いビット、つまり
4=01008=1000
は加算することが可能です。


FFFFのフラグの説明をだーっとやりましたが
多分くどい感じの説明で分かり難かったと思います(汗)
もっと簡単に説明出来れば良いんですが・・・