2017年 9月30日
その前にまずデータの扱いを整理する事にした。
ud(ユニットデータ)、cd(キャラデータ)、id(アイテムデータ)、itd(アイテム元データ)、これらの変数の何番目が何のデータかという奴だ。
最終的に今の所こんな感じになった。
; キャラ ;(0=フラグ、 ; 1=筋力、2=魔力、3=知性、4=魅力、5=HP、6=、 ; 7=属性、8=特殊能力、9=特殊能力値、 ; 10=GRNo、11=GRx、12=GRy、13=枠、14=背景、 ; 15=出現Lv、 ; 16=手スロット、17=防具スロット、18=特殊スロット、19=ITEMスロット、) ; ユニット ;(0=フラグ、cn(キャラNo、種類)、 ; 1=筋力、2=魔力、3=知性、4=魅力、5=HP、6=、 ; 7=属性、8=特殊能力、9=特殊能力値、 ; 10=所属PL、11=攻撃力、12=防御力、13=配属、14=、15=、 ; 16=手スロット、17=防具スロット、18=特殊スロット、19=ITEMスロット、) ; 最終値(21=筋力、22=魔力、23=知性、24=魅力、25=最大HP、26=現HP) ; 属性値(31=火、32=水、33=風、34=地、35=光、36=闇) ; 40=装備) ; ステータス(51=火傷、52=フリーズ、53=マヒ、54=スタン、55=ターンアンデッド、56=毒値) ; アイテム ;(0=フラグ、所持キャラ、 ; 1=筋力、2=魔力、3=知性、4=魅力、5=HP、6=、 ; 7=属性、8=特殊能力、9=能力値、10=所属PL、 ; 11=攻撃力、12=防御力、13=所持PL、 ; 14=装備箇所(1=手スロット、2=防具スロット、3=特殊スロット、4=ITEMスロット) ; 15=制作Lv ; 16=アイテム種類(0=未使用、1=右手、2=右両手、3=左手、4=左両手、 ; 5=盾、6=防具、7=アクセサリー、8=特殊、9=アイテム、10=魔法、回復魔法、状態魔法) ; ; 17=射程、18=攻撃範囲、19=
なぜこんな事をするのかと言うと、例えばキャラの 攻撃値格納が 15番で、アイテムの攻撃値格納が 11番だったりすると、扱いがややこしいからだ。
例えば統一した攻撃値の計算だと ud(ug+11)+=id(ig+11)のようになり、要するにそれぞれ 11番目の値が攻撃値なので分かりやすい。
今回それぞれ適当に手探りでやっていたので、データの扱いがバラバラだった。
大変だが、まだソースが少ない内にやってしまおう。
まず仕様番号の変わったデータを改変する、データコンバーターを作る。
と言ってもしごく簡単だ。
;/////// CHARA_data_converter /////// *chara_data cb=210 ; キャラ種類 cdb=20 ; データ量 dim cd,cdb,cb ; データ元 bload "c_data.dat",cd dim cd2,cdb,cb ; 改変データ repeat cb cd2(0,cnt)=cd(0,cnt) cd2(1,cnt)=cd(3,cnt) cd2(2,cnt)=cd(4,cnt) cd2(3,cnt)=cd(5,cnt) cd2(4,cnt)=cd(6,cnt) cd2(5,cnt)=cd(1,cnt) cd2(6,cnt)=cd(2,cnt) cd2(7,cnt)=cd(7,cnt) cd2(8,cnt)=cd(8,cnt) cd2(9,cnt)=cd(9,cnt) cd2(10,cnt)=cd(15,cnt) cd2(11,cnt)=cd(16,cnt) cd2(12,cnt)=cd(17,cnt) cd2(13,cnt)=cd(18,cnt) cd2(14,cnt)=cd(19,cnt) cd2(15,cnt)=cd(10,cnt) cd2(16,cnt)=cd(11,cnt) cd2(17,cnt)=cd(12,cnt) cd2(18,cnt)=cd(13,cnt) cd2(19,cnt)=cd(14,cnt) loop bsave "c_data.dat",cd2
そしてプログラム内のデータの扱いを全て変えていく。
隅から隅まで全部間違いなく変えないといけないので、これが大変な作業となる。
ところでこれ、たぶんプログラマー的に言うとやってはいけない事だと思う。
たしかプログラマーのハウツーに「最適化してはいけない」というようなものがあったと思う。
なぜかと言うと必ずバグが発生し、不慮のバグが残る可能性が増大し、最悪の場合動かなくなるからだ。
本当はデータの扱いを数字では無く、
d_str=1
ud(ug+d_str)、id(ig+d_str)
のような変数扱いでするべきなのだろう。
次回のプログラムからは考慮しようと思う。
さて、その作業で(バカみたいに)2日程費やし、いよいよ装備によるステータス計算を行う。
ソースはこんな感じ。
#deffunc equ_syo int equ_syon; 装備処理 cn=ud(ug) ; 基礎値 ------- repeat 5 : ud(ug+21+cnt)=ud(ug+1+cnt) : loop ; 基礎値 repeat sbkn : cnt2=cnt ; アイテムの基礎値+ in=ud(ug+40+cnt2) ; アイテムNo. if in<=0 : continue ; 装備してない ig=in*idb ; アイテムデータ先頭 repeat 5 ; アイテム能力値+ ud(ug+21+cnt)+=id(ig+1+cnt) loop loop repeat 2 : ud(ug+11+cnt)=ud(ug+21) : loop ; 基礎攻防値 repeat 6 : ud(ug+31+cnt)=0 : loop ; 属性値リセット ; 装備 ------- f=0 repeat sbkn : cnt2=cnt in=ud(ug+40+cnt2) ; アイテムNo. if in<=0 : continue ; 装備してない ig=in*idb ; アイテムデータ先頭 itn=id(ig) ; アイテム種類 repeat 1 ; 攻撃 if ud(ug+16)
装備無しの状態。
武器を装備。う~ん、気がつかなかったけど魔法防御値もいるんだよなあ。
うわあっ、そうだ魔攻値もだ。データ整理したばかりなのに、どうしたもんだろう。
今の所 2番目以降の武器の攻撃値は足さない。
防具のデータもまだ全部作ってないなあ。
後はアイテム枠増加の計算が残ってる。
これは頭痛いんだよなあ。枠増加枠に装備しているものが、枠増加アイテムを外した時に同時に外されるという・・・。