まずは軽いトコロでクリティカルデカ過ぎ問題を調べる。理由はバカバカしいもので、クリティカル成功率(19/20)って意味の値を19だけにしてて、それをクリティカル倍率にも使っていたからというね・・そら19倍にもなってたら大変ですわ。ということで連想リストで確率と倍率をペアに
無事、まともなダメージになりました、と。
そしてこっからが問題だ・・ま〜アイテムの他人使用には苦戦した。昨日朝から午後までやって解決できず、宿直中に20時から23時半までやって時間ギリギリで成功したというね。
まずアイテム使用対象を表示する部分。この座標を決めるのにまた苦労したんだけど・・それは頭を使わずに済む話なので良いとして、条件ワケのための判定に使うデータの保存が問題だったんですわ。
前回、BATTLE-U-ITEMスロットに次々と違う型のデータを入れてって、その型判定で雪崩式に表示を変化させていけるんではなかろうか?とか甘いことを考えていたわけですけど、まずそれが不可能(でもないけどスロットに入れるデータの構造が複雑になってしまうのと、前回作ったアイテムセルフ使用部分が書き直しになってしまう)であると判明、今回もたまたま不使用だったBATTLE-ITEMスロットを使うことに。ここを#fとnumber?で条件をワケて、同時にリスト上から何番目かのデータとする、と。
繰り返しになるけど条件ワケの流れをたどると・・BATTLE-MENUスロットが#fの時にmを押すとBATTLE-MENUが#tとなりメニュー出現。同時に念のためにBATTLE-ITEMとBATTLE-U-ITEMを#fで初期化しておく
その時点でiを押すとBATTLE-U-ITEMに0(#t)が入り
BATTLE-U-ITEMがnumber?の時の条件が満たされて矢印キーでの選択が可能となり、Enterで選んだ数値を元にしたアイテムがBATTLE-U-ITEMに上書きされる
するとBATTLE-U-ITEMがCons?の場合の分岐先が評価?されて、アイテムの種別判定開始。HSの場合は自分に効果を適用して終わり、と、ここまでが前回に作った部分。
この時にHO(味方の誰かに使用可能なアイテム)の場合にBATTLE-ITEMに0(#t)をセットするというのを追加
するとBATTLE-ITEMが#tとなって最後の条件(cond的には一番特殊なので一番先頭ってのに気づくのに苦労した)が満たされて、アイテムの種別がHOであった場合の処理を行う。C-LISTから抜き出されたHERO構造体のリストに対してBATTLE-ITEM番目を選択してアイテムを参照してHpの更新。
ここで最初はLoopを使った新HEROの挿入を行っていたのだけど、これがなんか動かない。後から考えるとElseの書き間違いだった可能性が高いんだけど、この時はもう頭の中でandとorが大乱舞していて再帰だからだめなのか?とか判断してしまったんですよね。で、破壊的変更。なんて楽なんだw
上のコードの続きでBATTLE-ITEM部分。ここにHEROリストでの矢印移動を書く。なんでかって言うと、ここにC-LIST変更(つまりHp変更後のHEROリスト追加)の処理を書いてC-LISTスロットへのset!を書いても反映されなかったから・・なんですよね。C-LISTだけよそからの破壊的変更が駄目ってわけでもないだろうから書き方に問題があったんだろうけど・・。
ただ、発見として破壊的変更を行うと画面の表示が瞬時に行われるんですよね・・新たな値を返す書き方だと何か新たなキー入力がないと画面が更新されない。もしかするとBig-bangは破壊的変更に向いた仕様になってるのではなかろうか?とか都合の良いことを考えたり・・・
で、その結果・・・
操作にまごついてたり、フレームレートのせいで見辛かったりするけど、ほぼ狙い通りの動きになった!
いや〜昨夜は時間ギリギリで解決できて興奮したなぁ〜
これさえ出来れば敵へのアイテム使用も魔法もほぼ一緒なので、今度こそ楽勝ではないか!?と思っております。