ロック属性なんて、実処理中には存在しない。

P\Q

これは、排他的論理和*1と呼ばれる論理演算の真理値表。
この「排他的論理和」、PとQが同じ値を持つ場合、「偽」となり、互いに異なっている場合に、「真」となる性質を持っている。
まぁ、だからこそ、「排他的」と呼ばれいるわけなんだけど。
それがこれから話すことに関係するかどうかは、まぁ、なんだ。読んでから判断って事で。


さて、デススマ公式DVDのブックレットによると、デススマでの撃破時に発生する得点アイテムの種別は、以下のように設定されている。

敵体属性・通常敵(いわゆる、レーザー属性):
破壊時ショットモード→ドクロ
破壊時レーザーモード→小王冠
破壊時ロックモード→小王冠
敵体属性・ザコ(いわゆる、ショット属性):
破壊時ショットモード→小王冠
破壊時レーザーモード→ドクロ
破壊時ロックモード→ドクロ

システム紹介の項目では、もう少し詳細に書かれているものの、種類決定がメインとなるので、発生個数などは省いた。まず、このことから判るのは、ロックモードは、レーザーモードに含まれる、特異な状況であると言うこと。とは言え、ロックモードを使う事で、発生個数が変化する敵が存在するのは事実なので、「ロックショットを使う方が、利益の大きくなる敵が存在する→だったら、ショットやレーザーと同じように、ロック属性と分けてしまえばいいんじゃね?」いう情報の圧縮が行われたと推察する。
閑話休題
ま、種別決定に限定して、話を進めていくのが主体なんで、これを表にまとめてみると、このようになる。

破壊時モード\敵の属性 ザコ
ショット属性
通常敵
レーザー属性
ショットモード 小王冠 ドクロ
レーザーモード
ロックモード
ドクロ 小王冠

この表に似せた表、どっかで見た記憶有りません?
そう。排他的論理和の真理値表。
実際の処理では、この演算結果を正論理で使っているのか、負論理で使っているのか、判んないんで、わかりやすくなるように、正論理で記述していこうとすると、
まず、デススマの場合、攻撃開始が、レーザーモードであっても、破壊時にボタンを放していると、ショットモードと扱われるので、一定時間入力がなかった、との意味合いから、ショットモードに0、つまり、偽を。で、逆に一定時間以上の入力があった、との意味合いから、レーザーモードやロックモードに1、つまり、真を。
で、通常敵に1、つまり、真を設定し、逆に、ザコに0、つまり、偽を設定することで、
発生させるアイテム種別を決定する式が、

アイテム種別に、破壊時のモード と 敵の属性 との 排他的論理和 を 演算し、代入する。

と日本語で書き表すことができると。……日本語MIND的な書き方だと、判りにくい人も居るかもしれないので、pascal的に書くと、

アイテム種別 := 破壊時モード xor 敵の属性;

このようになる。
さて、こうなってくると、アイテム種別で必要になる内部番号が決まってくるんだが、先の演算式のまま、小王冠に0、ドクロに1という値を設定すると、非パワーアップ中ならアイテムカウンタが、パワーアップ中なら累計カウンタが、カウントストップになった時に発生する大王冠の扱いがややこしくなるので、もう一手間加えて、

//アイテム種別には、破壊時のモード と 敵の属性 との 排他的論理和 を 演算した後、
//その結果 と 1 との 排他的論理和 を 演算した結果を代入する。
アイテム種別 := (破壊時モード xor 敵の属性) xor 1;

こうする。
このように記述すると、ドクロは0となり、小王冠を1、大王冠を2とすることができるようになると。


で、だ。ここまで長々と書いてきたんだけども……実は、論理演算には、

P\Q

こういう真理値表になる演算『否定排他的論理和』があって、それを使うと、最後の「xor 1」って部分を排除できたりするんだけど……ビット演算にせよ、論理演算にせよ、「not xor」や「xor 1」の追加などで対応できてしまうんで、実装されている処理系の方が少なかったりするんだわな。
な? どうでも良いことを考えたていたもんだろ〜?
そんなこと考えてる暇があったら、2億に到達できるようにパターンを考える方が建設的だと思うんだがな(笑)。
と、最後の最後で、全否定かまして締めくくってみたりする。

ただ、この『否定排他的論理和』。論理演算としては良いんだけど、今回の様な、種別IDを導き出す、って性格の演算には、ちと向かないんだわな。比較演算・条件分岐を行うことになるから、その分処理が遅くなる可能性も有るもんで。

……でも、こんな判断するなんて、アセンブラかじった影響が出てるような気がする。

*1:プログラミングの中でも、ビット演算をかじったことがあれば、XORと呼ぶ方がわかりやすいかもしれない。