昔のキャラクターの場合、自分のattack値は100で相手のdeffence値も100が基本なので、投げなどの固定ダメージも単純に数値を入れればよかった。が大会動画もさることながら、自分でAI対戦を眺めているときなどもパラメータ調整をやったうえで遊ぶケースもある。
そうした場合life・attack・deffenceなどのconstをいじるのが一番手っ取り早い。もちろんpalnoや強化スイッチによる性能調整が施してあるキャラクターならそこを調整してもよいが、特にそうしたものがない場合は基礎数値をいじることが性能調整の最短距離だ。
普通hitdef、いわゆる打撃技は自分のattack値と相手のdefence値を参照してダメージを出すので、特に記述をいじらなくてもダメージは調整される。しかし投げや打撃ロック後の技など、ダメージの取り方がtargetlifeaddの場合、オプションの記述やvalueの値を省略するとまるでダメージが通らなくなる。具体的には「相手の防御力は加味するが自分の攻撃力は無視した調整後のダメージ」になってしまう。そうならないように工夫の必要がある。
absolute=1
これは相手の防御力を無視する記述でありオプション記述であるので、デフォルトでは省略(absolute=0)してもエラーを吐かないので、書かなければそれでもよい。value値がそのままダメージに乗るので、例えば”相手の防御力を無視した大技”とか”コンボ補正〆の技でダメージを減らしたくない”とかのときに使うといいかもしれない。
しかし後述の自分の攻撃力を反映させた値と組み合わせて使った場合、「相手の防御力は無視するが自分の攻撃力補正は受ける」というインチキ臭いダメージになってしまうので注意が必要。
*(const(data.attack)*.01)
これをvalue値に乗算してやることで攻撃力を反映させられる。つまりconst(data.attack)が自分のattack値で、それを0.01倍することで、例えばattack=125だったら1.25を乗算することになり、これでようやくattack値をtargetlifeaddに反映させることができる。
これとabsolute=1を組み合わせると、例えばattack=250みたいなキャラの超必殺投げダメージが冗談抜きで即死レベルになってしまう。例えば600ダメージを想定していたら600*2.5=1500となり、これは普通のキャラのlifeが1000であることを考えればオーバーキルである。
[記述例]
value = -600*ceil((const(data.attack)*.01)
※damageもtargetlifeaddも整数でないといけないのでfloorかceilで少数の調整は必須。ちなみにfloor,ceilにしなくてもエラーを吐かない。valueが参照された時、値が少数になったときエラーでmugenが落ちる。
attackmulsetと変数
ここまでする必要があるかわからない。しかしattackmulset(攻撃力補正)はhitdefにのみ成立し、targetlifeaddは対象外なので、さらに試合中の状況で攻撃力が変わった時も反映させたいと考えるなら導入を考えてもいいかもしれない。
具体的には、どっかの監視ステートに
[state -2]
type = varset
trigger1 = roundstate=2 && alive
fvar(1) = 1+(lifemax-life)*.001
[state -2]
type = attackmulset
trigger1 = 1
value = fvar(1)
※ は各々のキャラクターの事情に合わせて記述を変える部分
を書き加えることでattackmulsetの値をfvar(1)と同じにし、あとはtargetlfeaddのvalue値にfvar(1)を乗算すればよい。上の記述の場合、残り体力に反比例して攻撃力が上がるように設計している。(const(data.life)が1000,今のlifeが500のとき、1+500*.001=1.5)
なので最終的に
[state ]
type = targetlifeadd
trigger1 = stateno=3000 && animelemno(3)=0
value = floor(-300*fvar(1)*const(data.attack)*.01)
みたいにすれば、「-300の減少値(300ダメージ)*攻撃力補正*attack値倍率補正」をかけた投げやロック技のダメージにすることができる。floor(少数切り捨て)にするのはtargetlifeaddのvalueが少数入るとエラーになる(int型)から。
ちなみにabsolute=1にしてないのは、ここまで攻撃力補正盛り盛りにして防御力無視するのはやりすぎだと思ったから。導入の是非はあなたが検討してください。
※attackmulsetを検知して凶悪化するキャラクターがいるので、attackmulsetと同等のtriggerとvalueにしたfvarを設定して、hitdefのdamageとtargetlifeaddのvalueの値の各々にこのfvarをかけてやれば結果的に同じことになる。
上の記述例の場合、targetlifeaddはそのままだが、hitdefのdamageが240,10とかだったら240*fvar(1),10*fvar(1)みたいにしてやればいい。