闘技場と天真のダメージ計算の仕組み | るーじゅ生活期2

るーじゅ生活期2

ゲームの缶詰WORネタ

あいすもなかさんが既にほとんど解説してくださっていますが、変数を日本語に直して、考察(解説?)とともにまとめました。

 

闘技場と天真のダメージ計算式はほとんど同じです(守備力の計算が違う程度)

 

<守備力>

 闘技場: (生命+防具の威力)÷3

 天真:  (生命+防具の威力+アクセ威力)÷4

※ 闘技場ではアクセの威力は、こちらも相手も守備力に反映されません

※ 闘技場と天真は守備力の計算だけ違います

 

<攻撃力>

 力+武器の威力

※重さ補正はありません

 

<攻撃回数>

こちら(闘技場・天真共通):

  (速さ-武器重さ -防具重さ -アクセ重さ)÷50 

相手(闘技場):

  (速さ-武器重さ -防具重さ -アクセ威力)÷50

※ 何故か闘技場の場合は、相手のhit数は速さからアクセの威力(補正込み)がマイナスされて処理されます。このため、例えばチャンピオンの人が威力100の属性一致アクセを装備してくれていると、相手の攻撃回数が-3されるので、チャンピオンを倒しきれなかった場合でも倒されない可能性が上がります。

 

<技発動時のダメージソース>

 rand(技の威力)+自分の知力-相手の精神

※ 相手の精神が等倍でダメージ減ソースとなります。マイナス値処理もありません。このため、相手の精神がバカ高いと技発動した瞬間にダメージが入らなくなります。

※ 一度技が発動するとそれ以降もダメージソースが同じ値で残ります。もう一度技が発動した際に、randで再抽選します

※ 相手から受けるダメージの場合は、1hit毎に技ダメージソースが0になります(オリジナルソースの赤字部分の処理)

 

<ダメージ計算式>

 rand(攻撃力)+技ダメージ-相手の守備力

※精神は等倍でダメージ量減らしてきますが、生命は3分の1倍しか減らしてこないので、闘技場で高精神嫌なのはそういう理由ですね

 

 

闘技場ではアクセサリーはダメージ減ソースにはならず、むしろ自分がチャンピオンになったときの攻撃回数を減らしてくれるメリットがあります。なので、皆さん、闘技場にはアクセサリーをつけて通いましょう!

 

ちなみに闘技場で防具を装備すると、威力÷3が確定で1hit毎にダメージ減されます。例えば、威力300の防具をつけて闘技場に通うと、受けるダメージが1hit毎に100ずつ減ることになり、自分が6hit出せると、相手のHPが600高くなるようなイメージです。防具はつけない方が良いですね。

 

なお、闘技場では技が1回発動すると、こちら側は技ダメージソースがリセットされない仕様なのですが、どうも天真の先手のトップバッターも、技ダメージソースをリセットする処理が抜けているようなのです。なので天真のトップバッターはMPが少なくても活躍できるかもしれません。

 

 

 

 

以下、闘技場のソース(主要部分のみ抜粋)
    $kdef = int(($kvit+$kprodmg)/3);
    $edef = int(($evit+$eprodmg)/3);

    if($khp ne "0"){
        $i=0;
        $katt = $kstr+$karmdmg;
        $k_hit = int(($kagi - ($karmwei + $kprowei + $kaccwei))/50);
        if($k_hit <= 0){$k_hit = 1;}
        $com1 .= "$knameの攻撃!<font color=red>$k_hit</font> HIT!<BR>";
        while($i < $k_hit){
            $r_no = int(rand(3));
            $randam_no = int(rand(100));
            if($r_no eq "0"){
                if($ehp eq "0"){
                    if($ehp eq "0" && $eshp eq "0" && $ethp eq "0"){
                        last;
                    }else{
                        $r_no++;
                        next;
                    }
                }else{
                        $k_mpdown = int($ktec_str/2);
                    if($ktec_hit > $randam_no && $kmp > $k_mpdown){
                        $com1 .="<font color=red> $ktec_name</font>";
                        $kmp -= $k_mpdown;
                        if($ktec_cho){
                            $khp += $ktec_str;
                            if($kmaxhp < $khp){$khp = $kmaxhp;}
                            $ com1 .= "$ knameの体力が$ ktec_str回復されました。";
                        }else{
                            $clit = int(rand($ktec_str))-$emen+$kint;
                        }
                        $com1 .= "<BR>";
                    }
                    $s1_kdmg = int(rand($katt)) + $clit - $edef;
                    if($s1_kdmg<0){$s1_kdmg=0;}
                    $ehp -= $s1_kdmg;
                    $com1 .= "$kname の攻撃! $ename に $s1_kdmg のダメージ!<BR>";
                    if($ehp eq "0" || $ehp < 0){
                        $ ehp = 0;
                        $khit+=1;
                        $com1 .= "$ename は力が尽きて倒れた。<BR>"
                    }
                }
            }
            $i++;
        }
        if($ehp eq "0" && $eshp eq "0" && $ethp eq "0"){
            $flg=1;
            $ com1 .= "$kunit軍は$eunit軍を全滅させた!<BR>";
        }
        $message1 = "st[$number]="$com1"";
        $number++;
    }

    if($ehp ne "0"){
        $i=0;
        $eatt = $estr+$earmdmg;
        $e_hit = int(($eagi - ($earmwei + $eprowei+$eaccdmg))/50);
        if($e_hit <= 0){$e_hit = 1;}
        $ com4 = "$enameの攻撃!<font color=red>$e_hit</font> HIT!<BR>";
        while($i < $e_hit){
            $r_no = int(rand(3));
            $randam_no = int(rand(100));
            if($r_no eq "0"){
                if($khp eq "0" ){
                    if($khp > 0 || $shp > 0 || $thp > 0){
                        $r_no++;
                        next;
                    }else{
                        last;
                    }
                }else{
                        $ e_mpdown = int($ etec_str / 2);
                    if($etec_hit > $randam_no && $emp > $e_mpdown){
                        $com4 .="<font color=red> $etec_name</font>";
                        $emp -= $e_mpdown;
                        if($etec_cho){
                            $ehp += $etec_str;
                            if($emaxhp < $ehp){$ehp = $emaxhp;}
                            $ com4 .= "$enameの体力が$etec_str回復しました。";
                        }else{
                            $clit = int(rand($etec_str))+$eint-$kmen;
                        }
                        $com4 .= "<BR>";
                    }
                    $s1_edmg = int(rand($eatt)) + $clit - $kdef;
                    if($s1_edmg<0){$s1_edmg=0;}
                    $khp -= $s1_edmg;
                    $com4 .= "$ename の攻撃! $kname に $s1_edmg のダメージ!<BR>";
                    if($khp eq "0" || $khp < 0){
                        $ khp = 0;
                        $ ehit + = 1;
                        $com4 .= "$kname は力が尽きて倒れた。<BR>"
                    }
                }
            }
            $i++;
            $clit=0;
        }
        if($khp eq "0" && $shp eq "0" && $thp eq "0"){
            $kflg=1;
            $com4 .= "$kunit 軍は全滅した。.<BR>";
        }
        $message4 = "st[$number]="$com4"";
        $number++;
    }