【0061】アイテムマスタを作る
どこまで行きましたっけ。
枠作ったところですね。
【0059】ではアイテム表示画面を実装しました。
今回は、その枠に所持品を表示し…
所持品って何?
というわけで、アイテム画面を描画するのに必要な、
アイテムのデータ実体を作りたいと思います。
【0060】でかいた通り、アイテムのデータの大半は
データベース化された文字列(配列)データの中に蓄えられ
必要に応じて読み出されることになります。
アイテムとはなんだろう
ということで、アイテム画面を掘り下げる前に
アイテムのデータモデル(のようなもの)から仮決めしていきます。
「仮」というのは
どうせあとからまた変わるだろうことが容易に想像できるからです…
: 'アイテムテーブル' && {
#暫定
##アイテムテーブルはn個の半角スペースで区切られた要素で構成される。
##各要素に半角スペースを含めることはできない(区切れてしまうので)。
##あくまでも暫定なのでもうちょっとちゃんとした形に変わるかも。
###アイテムIDは0000~FFFFとする。
#カテゴリ
#CSM:薬系
#ARM:腕
#SUT:シャツ
#BTM:ズボン
#MNT:マント
#ANT:触覚
#ACS:アクセサリ
#MAG:符
#OTH:他
declare -g -a TBL_ITM_INFO=()
# 0 1 2 3 4 5
# ID CAT CRR 修飾_全角10文字 名称_全角10文字 説明_全角22文字
#TBL_ITM_INFO+=('FFFF CSM +00 1234567890 1234567890 1234567890123456789012')
TBL_ITM_INFO+=('0000 CSM 000 nomod 八卦炉 激しくマーライオンする' )
TBL_ITM_INFO+=('0001 CSM 000 永遠亭謹製の おくすり あなたはもう死ねなくなる' )
TBL_ITM_INFO+=('0002 CSM +02 紅魔館メイド手製の 毒弁当 瀟洒!' )
TBL_ITM_INFO+=('0003 CSM +01 魔法の森でとれた キノコ エッチな形をしている+1' )
TBL_ITM_INFO+=('0004 CSM +02 魔法の森でとれた キノコ エッチな形をしている+2' )
TBL_ITM_INFO+=('0005 CSM +03 nomod キノコ エッチな形をしている+3' )
TBL_ITM_INFO+=('0006 CSM +04 魔法の森でとれた キノコ エッチな形をしている+4' )
TBL_ITM_INFO+=('0007 CSM -10 アロマ臭のする 陰陽玉 いいにおいがする。霊夢愛用。' )
TBL_ITM_INFO+=('0008 CSM 000 七色に光る 壊れた人形 血がついている' )
TBL_ITM_INFO+=('0009 CSM 000 nomod 宝塔 おでん' )
#エラーアイテム
TBL_ITM_INFO_ERR=('ZZZZ ERR +99 該当アイテムなし 該当アイテムなし 該当IDのアイテムは登録されていません')
まずはアイテムの大分類です。
#カテゴリ
#CSM:薬系
#ARM:腕
#SUT:シャツ
#BTM:ズボン
#MNT:マント
#ANT:触覚
#ACS:アクセサリ
#MAG:符
#OTH:他
とあります、タダのコメントなので何の意味も持ちませんが。
全種類実装されるかどうかは怪しいですが
リグルくんの各種装備箇所と消耗品っぽいものを列挙しています。
なんとなく武器防具という分類はやめようかなと。
すべての装備箇所は平等にそのパラメータも持ちうる。
ズボンで攻撃力ってのは想像つかないですが。脱ぐのか。私に効くぞ。
とりあえずCSM消耗品のアイテムをいくつか作ってみました。
declare -g -a TBL_ITM_INFO=()
# 0 1 2 3 4 5
# ID CAT CRR 修飾_全角10文字 名称_全角10文字 説明_全角22文字
#TBL_ITM_INFO+=('FFFF CSM +00 1234567890 1234567890 1234567890123456789012')
TBL_ITM_INFO+=('0000 CSM 000 nomod 八卦炉 激しくマーライオンする' )
TBL_ITM_INFO+=('0001 CSM 000 永遠亭謹製の おくすり あなたはもう死ねなくなる' )
プロポーショナルフォントじゃめっちゃくちゃなんですが
アイテムは0000〜FFFFのIDを持つと同時に
先のカテゴリのパラメータを有します。
で、次が、rpgとかによくある「修正値」です。効果は考えてません。
強くなったり弱くなったりするんでしょう。
次が、修飾子で、昔流行った「魅魔の宮殿」ってやつにあったようなのを
想像しています。効果は考えてません。もしかしたら名前だけでパラメータには影響させないかもしれません。
次がアイテム名称本体です。特に説明することもないですが、
薬草だったら薬草って書いてあります。そういうやつ。
最後が説明文言。アイテム表示枠に表示するものですが、体を表さない説明文を書くかもしれません。
そうして「それらの項目をスペースで区切った文字列」一つを
1アイテムとして配列保持します。
FFFFも要素を持つ配列なんて扱うことになると思ってない、危険ですね。
本来なら上記の修飾子と修正値ってのはアイテムマスタとして保持するものではなく、付帯情報として別に定義されるものだと思いますが
一旦はこれで行きます。
最後の行に「エラーアイテム」というのを作りました。
これは、アイテムマスタを検索したときに、何らかの理由でマスタに存在しないアイテムIDが検索されたときの危険回避アイテムです。
アイテムマスタをなめる処理では、見つからなかったときにこのアイテムを返すような仕組みにしたいな、と思ってのことです。
(なおこの時点ではノープラン)
こうしてアイテムマスタを作りました、
プレイヤーはこのマスタの中に登録されているアイテムを複数
持ち物として保持することになります。
「持ち物リスト」のようなものが、
動的なデータストアとして定義されるでしょう。
## 所持アイテム格納配列
### アイテムID で保持
declare -a -g psnItemList
スクリプト冒頭で初期設定を行う処理の中で、
所持アイテム格納配列、つまり「どうぐぶくろ」を作っています。
見ての通りグローバルとして定義されているのみで、
アイテムは入っていません。
「拾う」のコマンドが実装されると、この配列にアイテムIDがわんさか入っていくのでしょう、という想像をするまでです。
というわけで一旦アイテムマスタのマネごとのようなものを作りました。
アイテム欄に表示するのは、実際にゲーム中に持ち物に登録されているものです。が、「拾う」コマンドは実装されていないので、どこかで仮アイテムをもたせる必要が有るだろうと留意して、一旦は終わります。
アイテムマスタが出来たので、
今度はこのマスタからランダムに一つを選ぶという機能に
道筋をつけたいと思います。
いわゆる「抽選」です。
次から大変そう…