目次

目標

やりのこしていたタフガイ戦士鉄人戦士の比較をするよ。

タフガイと鉄人の成長経路や初期値がどれだけなら鉄人を選んでもいいのかを可視化したいよ。ついでに、タフガイと鉄人のすばやさの成長についてもグラフにするよ。

今回は、一度乱数を出してその乱数に各種係数をかけ合わせる方法を取るよ。つまりタフガイ・鉄人共々同じ乱数流用して計算するよ。

流用するのは多少問題あるけど面倒だからしかたないね。

1 復習 ステータス成長の仕組み

まずステータス成長の復習をする。

DQ3キャラクターのレベルアップ時のステータス成長には計算式があり、簡潔にまとめると

  成長値 = 職業基本成長値 × 乱数 × 性格補正

で決まる。

詳しくはこのページを参考

きほんはまる 『SFC版DQ3 ステータス成長について

体力値はHPと密接な関係があり、特にゾーマ戦時の回復役:戦士の体力値はゲームクリアに関わる重要な要素である。

ステータスの期待値については、体力にかかわらず全てのステータスが上記ページで提示されているが、「レベルアップごとに乱数が絡んでくるDQ3において期待値のみを見て良いのか」、という疑問が残る。

その疑問に答えるため、1万人分のタフガイ戦士を成長シミュレートし、体力値はどの程度の幅を持つのかを前回調べた。

plot of chunk 前回の図

今回は割とどうでもいいけど手軽に調べれそうな前回有耶無耶にして終わっていた、タフガイと鉄人との比較を主に行う。

2 本題 タフガイと鉄人
 体力

本題であるタフガイと鉄人の成長の違いを図示する。

図では、性格の違う戦士がLv22までにそれぞれどの程度体力値が伸びるのかを表している。乱数成長を考慮し、それぞれの性格の体力値は幅をもたせて表示している。塗りつぶされた部分にはそれぞれの成長データの上位2.5%と下位2.5%を除いた95%部分である。緑で塗りつぶしたタフガイ成長範囲部分に、ピンク色の鉄人成長範囲を重ね合わせている。

plot of chunk 成長幅

当然のごとくタフガイのほうが体力の伸びが良いため、最終値はタフガイが高い値を取りやすくなっている。わかりやすく平均値のみ比較すると、タフガイのLv22平均127.1449、鉄人のLv22平均117.911である。

Lv22時点での体力成長値を表で示す。「低値」および「高値」は極端な値(上昇値上位2.5%と下位2.5%)を取り除いた時の下限と上限を表す。つまり、緑やピンクで塗りつぶした部分の一番下と一番上の部分である。

タフガイ てつじん
低値 110.33 102.32
平均 127.14 117.91
高値 143.89 133.44

表の通り、期待値でおよそ10、高値においても10.4503の差が出るため、性格:タフガイの恩恵は非常に大きいことが分かる。

ここで表示した値はLv22までの伸びをあらわすため、この体力成長値の整数部分に体力初期値(Lv1時の体力)を足しあわせた値が最終的な体力値となる。例として、体力初期値が20と仮定した場合、最終的な体力の期待値はそれぞれ

タフガイ147

鉄人137

となり、鉄人はタフガイよりおよそ6.8027%体力が低くなる

鉄人が体力成長でタフガイに優る点として変動幅の小ささがあるが、それも微々たる違いであり、優先的に鉄人を選ぶ理由とは成り得ない。 わかってたけどやっぱりタフガイ一択だったよ。

一応、先ほどの図に成長期待値線を付け足した図も載せておく。

青い破線がタフガイの成長期待値を描いた線、赤い破線が鉄人の成長期待値を描いた線である。前述のとおり、Lv22で赤線と青線の差はおよそ10ある。

plot of chunk 平均経路付き

 すばやさ

次に、タフガイと鉄人のすばやさの成長値を図示する。

すばやさの比較は、『すばやさ補正が低い鉄人のほうがゾーマ戦の石先行率を下げ、HPの伸びが低くとも安定した戦いができる』という仮説が正しいか確かめるために行う。ゾーマ戦の先行率は以下のページで調べる。

SFC版DQ3先攻率のシミュレーター

図3では、性格の違う戦士がLv22までにどの程度すばやさが伸びるのかを表している。 Lv1のすばやさ初期値をおおよその平均値である3とし、成長値を積み上げて計算した。先程と同様に緑がタフガイで、ピンクが鉄人の値を表す。また、Lv22時点でのすばやさ値も同時に表で示す。

plot of chunk 素早さ比較用

タフガイ てつじん
低値 16.17 14.68
平均 18.05 16.35
高値 19.89 17.98

表の通り、すばやさ初期値3と仮定した時タフガイおよび鉄人のすばやさ期待値はそれぞれ約18・約16である。

前述の先攻率シミュレーターでLv22時すばやさ平均値である18と16をAのすばやさとし、すばやさ80のゾーマに先攻する確率を求めたところ、

タフガイ Aの先攻率: 2.35± 0.47 (%) [標準偏差*3]

鉄人 Aの先攻率: 1.98± 0.40 (%) [標準偏差*3]

となった。タフガイ先行確率は、2.35%から1.98%に下がっている。

つまり、タフガイと比べて、鉄人を選択した場合はゾーマ戦の石先行率が約15%下がる。 

3 まとめ

今回行ったタフガイと鉄人の比較により、体力初期値20と仮定した鉄人は同じ体力初期値のタフガイにくらべ、HPが6.8027%低く、ゾーマ戦の石先行率を約15%下げる性格であることが分かった。

・・・

なお、お気付きの通りこのパーセント表示はただの印象操作であり、実際は重要度で体力上昇値に優るものはなく、殆どの場合において戦士の性格はタフガイ一択である。

もし鉄人の戦士が採用されるとすれば、タフガイ戦士の体力初期値の平均より8~10程度高いような鉄人戦士ができた場合であり、そのとき採用された鉄人戦士はゾーマ戦でタフガイ戦士より安定する可能性がある。ただしその安定効果は石先行率が2.35%から1.98%に下がる程度のもので、その安定効果を実感できるかは不明である。

おわり

感想

やりやすかったから戦士のステに関してずっと見てきたけどもDQ3RTAで本当に知りたい部分って、転職するキャラ(賢者・魔戦)のステ変動だったり 怠け者勇者と豪傑勇者の違いだな と。これらのキャラクターがどう成長するのか、いつか図示してみたいところ。なおいつやるかは未定。 

最後に、戦士のすばやさ初期値をしらべてくれたNAVEさんありがとうございました ∠( ゚д゚)/

補足 使用コード

今回使ったコード表示しておくよ。全部書き出すと長いから体力比較のやつだけ。

Ts =c(2,2,2,2,2,2,2, ##戦士の基本成長値ベクトル
      5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5,5.5)
Ts.m= c(30,33,37,41,45,49,53,61,68,76,
        83,91,98,106,113,121,128,136,143,151,
        158,166)  ##男戦士上限値ベクトル
TOUGH = 179/128 ##性格補正 タフガイ
IRON  = 166/128  ##性格補正 てつじん

w.T=Ts*TOUGH
w.I=Ts*IRON ## 平均成長の値

lv  = 1:22
wnp = data.frame(
  cbind(lv,
    cumsum(c(0,w.T)),
    cumsum(c(0,w.I))
  )
 )     ## 平均成長経路表示用

Nave = function(n) (136+sum( sample(0:31,n,replace=T)) )%%256
       ##乱数生成用 

DQ_Ts = function(a){ ## aは初期値 今回は0
 Ts_dice = sapply(rep(16,21),Nave)
  Ts1 = (Ts*Ts_dice/128)
  cumsum(c(a,Ts1))  
 }   ## 乱数値と基本成長値をかけたものを作る(ふつう成長のシミュレート)

war = sapply(rep(0,10000),DQ_Ts)
    ## ふつう成長を1万人分シミュレートした行列作成

war.T = war*TOUGH ##シミュった行列にタフガイ成長値をかけたもの
war.I = war*IRON  ##同様にてつじんも、同じ行列に掛けあわせて作る


library("ggplot2")  ## ggplotによる描写の準備

Phy.T = as.vector(war.T)  ##タフガイ行列のベクトル化
ID = rep(1:10000,, each = 22) ##IDベクトル
Lv = rep(1:22, length=220000) ##レベルベクトル 
wr.T =data.frame(cbind(ID,Lv,Phy.T)) #データフレーム化

#てつじんも同様につくる
Phy.I = as.vector(war.I)
wr.I  =data.frame(cbind(ID,Lv,Phy.I))

#描写始め
d = ggplot(wr.T,aes(x = Lv,y = Phy.T)) ##使うデータ選択し x軸y軸を指定

d = d + stat_summary(data = wr.T,aes(x = Lv,y = Phy.T),
                     geom="ribbon",       ##
                     fun.data="median_hilow",  ## 95%範囲を塗る
                     fill = 3 ,alpha = 0.3)    ## fillが色 alphaが透明度    
           
d = d + stat_summary(data = wr.I,aes(x = Lv,y = Phy.I),
                     geom="ribbon",fun.data="median_hilow",
                     fill = 2 ,alpha = 0.1)    ##てつじんのグラフを付け足し

d = d + geom_line(data = wnp,aes(x = lv ,y = V2),linetype = 2,
                  size = 0.5, col ="blue")        ##タフガイ成長期待値
d = d + geom_line(data = wnp,aes(x = lv ,y = V3),linetype = 2,
                  size = 0.5, col ="red")          ##てつじん成長期待値

d = d + ggtitle("図1:タフガイ戦士と鉄人戦士の成長範囲")  ##タイトル
d = d + ylab("Phy") + xlab("Lv") ##軸名記述
print(d) ##描写コマンド 

## おわり