あんな反則球に行き着いた理由
以下、なんでこんな方法になったかってハナシ。いらん人はスルーでどうぞ。
自分で言うのも何だけどホント駄文。
勢いで書いちゃったから載せてみるけど・・意味不明だったらスンマセン
アイテムの装備状況を調べる方法は意外と少ないんですな。
関数としては、 IsEquiped Item と、Info。
問題はもちろん、それぞれの関数を使って、特定のアイテム名を表示させれるかどうか。
・IsEquiped
アイテム名ごとに調べなきゃならないのでサブルーチン必須。
しかもメッセージに関わる新しいアイテムを追加するごとに、記述を追加しないといけないからメンテナンス性に難アリ。
・Item
何番目のアイテムかを指定できなきゃ名称は帰ってこないのでこれもサブルーチンのお世話に。
そして、メッセージに関するアイテムかどうかの判定もしないといけない。
装備できるアイテムが色々含めて最大一つ、って状況なら良いんだろうけど。シナリオ次第過ぎるしねぇ。
・Infoの「アイテム,番号」
基本的にItem関数と同じ・・
要は、アイテム単体ではサブルーチンを使わない限り、一定の条件を満たすアイテム名を表示させる事は無理っぽい、ということ。
ではどうするか。
そもそもサブルーチンを使わないとすると、「関数の結果がそのままアイテム名である」ような関数。少なくとも文字列が帰ってくる関数でなきゃダメ。
そして、引数に番号が必要な関数はダメ。問題のアイテム(や、そのアイテムによって付け加えられた能力)が何番目か分からないから。
つまり、文字列を引数にして、文字列が返って来るような関数じゃないといけないことに。
行き着いたのが、Info関数で特殊能力の解説を呼ぶ形。
・・・ええと、いい加減だらだらとした文なので、以下手抜き。
案:「解説文としてアイテム名を入れる」
→問題1
○解説文として設定するので、通常の操作でその不自然な解説文が表示されるのは避けたい。
・問題1への対策案
非表示能力の解説として設定する。
(理由・・・ステータス欄に無い能力の解説は、通常見れない(一部例外アリ。例えば、防御能力の「能力必要」オプション使用時))
→問題1への対策案における問題
・・・非表示能力の解説ってどうやるんだっけ?(笑)
元々参照できないハズの所だから、ヘタをすると設定できない恐れも??
・それの解決案
(特殊能力名)=解説 (解説文)
だけ持たせると、ステータス欄には表示されない。って言うか能力を持っていることにならない。
→問題2
○解説を持たせる事はできる。だが、Info関数で呼び出すと能力を持っていない場合エラーが出る。
・問題2への対策案
始めから解説は持たせておき、アイテムを装備すると解説が変わるようにすればいい。
→あらたな問題
「・・・どうやって?」 解説を複数持たせると、先にあったもの(もちろん、ユニットに始めからある方)が優先されるけど。
●ここで悩んで脇道
「そういえば、アイテムに設定したダミー特殊能力って、パイロット能力とユニット能力をどう判別してるんだろう?」
(これは良く考えれば完全な勘違い・・・。アイテムに設定できるのは基本的にユニット能力とアイテム専用能力のみだってば)
「アイテムに設定された能力をパイロットのものとユニットのものを判別してないとすれば、
Info関数使ってパイロットデータから参照できそうじゃね? 始めからユニット能力として持ってる解説は参照できないはずだし」
(思い返すと矛盾しまくりな思考ですなぁ。解説が表示されなかったらエラーが出るからユニット能力として持たせ始めたのに・・)
結果
Info(パイロット,Pilot(),特殊能力解説,(特殊能力名))を参照した所。
アイテムでの能力が優先して表示。アイテム無しだとユニットのが表示。
(ちなみに、ユニット能力のデフォルトでの解説を、Info(パイロット,〜〜〜)で呼び出しても空文字列しか帰ってこないようで)
「できた!!」
・・で、即座に「ユニット能力の解説を、Info(パイロット,〜〜)で呼ぶのって、どう考えても動作保障されないよな・・・・」と気付いてレスを断念。
サブルーチンを使って云々、を書く気力は残ってませんでした。
ついで気付いた、仕様外であること以外の欠点・不明点。
・解説能力の所持順番によって、Info(パイロット,〜〜)で表示される優先順位が変わるかもしれない。
パイロットデータに持たせた場合、アイテム装備後に乗り換えた場合はちゃんと表示されるか?
・メッセージ表示用解説能力を持たせたアイテムを複数持った場合に対応できない。
結論
無理せず始めっからサブルーチン呼べ
orz