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番目以降の武器の攻撃値は足さない。

防具のデータもまだ全部作ってないなあ。

後はアイテム枠増加の計算が残ってる。
これは頭痛いんだよなあ。
枠増加枠に装備しているものが、枠増加アイテムを外した時に同時に外されるという・・・。