忍者ブログ
windowsやブラウザ のゲーム作ったりとか。
2026年12月11日(金)にツクールフォーラムが閉鎖されるそうです。
貴重なリソースの内、戦闘計算式に関係するものを検索して記録します。
情報発信者の皆様、情報をありがたく保存、活用させていただきますね。

基本的に計算式にスクリプトを書くその計算式です。

1つのスキルで「味方を強化」、「敵を弱体」する(回答:ノリミツ様)
①「範囲」を「敵」にして、使用効果で「弱体」「防御力」を設定
② 味方の強化は「計算式」に以下のスクリプトを書く
 (タイプを「MPダメージ」にすると、0ダメージが非表示になります)
JavaScript:
// アクターにバフを与える
// パラメータIDは、0:最大HP、1:最大MP、2:攻撃力、3:防御力、4:魔法力、5:魔法防御、6:敏捷性、7:運
$gameActors.actor(アクターID).addBuff(パラメータID, ターン数);
// 例)アクターID:1 に 攻撃力強化 を 3ターンかける
$gameActors.actor(1).addBuff(2,3);

「攻撃側が装備している武器の武器タイプナンバー」を参照(回答:くろうど様)
a.weapons()[0].wtypeId

敵サイドの一匹が混乱ステート(行動制約:誰かに攻撃する)時、通常攻撃を同じ敵サイドの誰かに仕掛ける時にダメージの倍率を変えられるシステムを構想するもの。(投稿:ミュウト様)
○Math.max((a.atk * 2 - b.def * 1) * b.elementRate(65), (a.atk * 1.5 - b.def * 0.5) * b.elementRate(65)) * (a.isEnemy() && b.isEnemy() && a.isConfused() ? 2 : 1)
※b.elementRate(65):防御側がアクターかエネミーかによってダメージを変化させる係数。アクターの場合は0.5、エネミーの場合は1と代入。

敵の防御力と魔法防御の低い方を参照し、防御力の方が低い場合場合自分の攻撃力を、魔法防御の方が低い場合自分の魔法力を参照するスキル(投稿:んーぞー様)
$gameVariables.setValue(1, $gameSwitches.value(1) ? 1 : 2);
三項演算子は以下の例で言うところの a が真なら b を、偽なら c を返します。
a ? b : c
1行にまとめる方法としては他にもセミコロンを使えば改行なしで改行と同じ意味にできます。
let attack, defense; if (b.def < b.mdf) { attack = a.atk; defense = b.def; } else { attack = a.mat; defense = b.mdf; } attack * 4 - defense * 2

"Hello world!" という警告ダイアログを出して 100 程度のダメージを与える(投稿:ルファー様)
alert("Hello world!"); 100
ダメージ計算時にプロンプトが表示され、そのとき入力したダメージを与えられる(投稿:ルファー様)
prompt('与えるダメージを入力', '0')
分散度を 0 にする。
残りHPで戦略を変える敵やイベントのデバッグに便利(投稿:ルファー様)
prompt('与えるダメージを入力 (対象のHP: ' + b.hp + '/' + b.mhp +')', '0')
スキルではなくアイテムでこれやると、入手手段を設けなくとも戦闘テスト時に勝手に追加される

ダメージに上限と下限を設定(投稿:シトラス様)
(ダメージ計算式.clamp(min,max)
例:ダメージの下限を1000に、上限を9999
(4*a.atk - 2*def).clamp(1000,9999)


以下、自分の考えた面白スキルスレッドからは
他ユーザーの利用を許可していると思われるもののみ抜粋しました。
そもそもこのスレは、共有目的なので、全部OKとは思うのですが、まあ一応。
容量の関係で、原文ではなく色々割愛されています。

攻撃時にバフ・デバフを付与(投稿:ミネッコ様)
a.addBuff(2,4);a.atk * 4 - b.def * 2;
(2,4)の部分は前半が上下させるパラメータの種類で、後半が持続ターン数
パラメータは0が最大HP、1が最大MP、2が攻撃力、3が防御力、4が魔法力、5が魔法防御、6が敏捷性、7が運
a.addBuffをa.addDebuffにすれば攻撃時に自身にデバフを付与してしまうリスキーなスキルに応用可能
組み合わせて、複数のバフ・デバフも設定可能
a.addDebuff(2,4);a.addBuff(3,4);a.atk * 4 - b.def * 2;

HP残量が多いほど高威力(最大で4倍)、下がると威力が減(投稿:ミネッコ様)
4 * (a.atk * 4 - b.def * 2) * (a.hp/a.mhp)
速度補正をマイナスにすると、ターン中の敵の攻撃により威力が増減しギャンブル性アップ

クリティカルヒットで、防御貫通(投稿:シトラス様&ツクマテ)
a.atk - (b.result().critical ? 0 : b.def)
b.result().criticalで、攻撃がクリティカルしたか判定

バトルログメッセージを表示する(投稿:エルトン様)
BattleManager._logWindow.push('addText', "メッセージ1よ、");BattleManager._logWindow.push('waitForNewLine');BattleManager._logWindow.push('addText', "メッセージ2");BattleManager._logWindow.push('waitForNewLine');BattleManager._logWindow.push('waitForNewLine');BattleManager._logWindow.push('waitForNewLine');b.result().used = false;
BattleManager._logWindow.push('waitForNewLine');で1行分ウェイトをかけている

回復効果率によって変動する回復系スキルや吸収系スキル(投稿:猫二郎様)
回復効果率は計算式ではrec
物理型吸収系の場合は
a.rec * a.atk * 4 - b.def * 2
魔法型吸収系の場合は、
a.rec * a.mat * 4 - b.mdf * 2
物理型回復系の場合は
基本値 * a.rec + a.atk * 2
魔法型回復系の場合は
基本値 * a.rec + a.mat * 2

時々敵の防御を貫通する攻撃(投稿:シトラス様&MVTrinity)
[自分の攻撃力]×[倍率]ー[相手の防御力]×[変数]+[定数]
スキルにコモンイベントを仕掛けておき、攻撃後に変数がランダムで0になるようにする
さらに、このコモンイベントをゲーム開始時に1回、発動させておかないと
スキルの初回使用時には防御力貫通が確定してしまうので注意。

敵のレベルが素数の時にダメージを与える(投稿:takachan様)
前提はレベルは1~99までで、2から√99以下(9<√99<10なので9まで)の整数で1つも割り切れなければ素数ですが、4、6、8は2で割り切れて、9は3で割り切れるので、2、3、5、7の4つの数字でどれも割り切れない場合は素数になります。
この考え方で、スクリプトを書きます。
ただし、2、3、5、7は素数なので2、3、5、7に該当した場合はスキルを発動します。
通常のRPGツクールMVでは・・・
if ( (b.level == 1) || ((b.level % 2 == 0) && !(b.level == 2)) || ((b.level % 3 == 0) && !(b.level == 3)) || ((b.level % 5 == 0) && !(b.level == 5)) || ((b.level % 7 == 0) && !(b.level ==7)) ) { 0 } else { a.mat * 4 - b.mdf * 2 }
素数でなければダメージは0、素数ならばダメージはa.mat * 4 - b.mdf * 2になります。
SRPGコンバーターMVを使っている場合は敵ごとにレベルを設定できるので以下のように記述します。
if ( (b.enemy().meta.srpgLevel == 1) || ((b.enemy().meta.srpgLevel % 2 == 0) && !(b.enemy().meta.srpgLevel == 2)) || ((b.enemy().meta.srpgLevel % 3 == 0) && !(b.enemy().meta.srpgLevel == 3)) || ((b.enemy().meta.srpgLevel % 5 == 0) && !(b.enemy().meta.srpgLevel == 5)) || ((b.enemy().meta.srpgLevel % 7 == 0) && !(b.enemy().meta.srpgLevel == 7)) ) { 0 } else { a.mat * 4 - b.mdf * 2 }
素数でなければダメージは0、素数ならばダメージはa.mat * 4 - b.mdf * 2になります。
敵のレベルが素数の時にダメージを与える その2(投稿:シトラス様)
[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97].indexOf(b.level) !== 1 ? 9999 : 1

パーティメンバーがひとりの場合は1000ダメージ、それ以外は1(投稿:天照@61様)
$gameParty.size() == 1 ? 1000 : 1
パーティメンバーがひとりの場合は10倍ダメージ、それ以外は1(投稿:シトラス様)
(a.atk - b.def/2 + 10)*($gameParty.size() === 1 ? 10 : 1)

女性にダメージを与えられないスキル(投稿:シトラス様)
女性エネミーのメモ欄に<lady>と書き込み
b.enemy().meta.lady ? 0 : a.atk - b.def/2 + 100

歩数アタック(投稿:猫二郎様)
$gameParty.steps()
戦闘勝利回数から逃走回数を引いたダメージ(投稿:猫二郎様)
$gameSystem.battleCount() - $gameSystem.escapCount()
HPが20%以下になると威力が二倍になる(投稿:猫二郎様)
a.atk * 4 *(a.hp <= a.mhp / 5 ? 2 : 1) - b.def * 2
防御している時に通常の2倍ダメージを与え、それ以外には通常ダメージ(投稿:猫二郎様)
a.atk * (b.isGuard() ? 4 * b.grd : 1)
相手のHPに割合ダメージのスキル(投稿:猫二郎様)
b.hp * 1/4

武器ごとに計算式を設定(投稿:tubo様)
a.weapons()[0] && a.weapons()[0].meta.formula ? eval(a.weapons()[0].meta.formula) : a.atk*4-b.def*2
防御バフ無視攻撃(投稿:tubo様)
a.atk * 4 - b.def / b.paramBuffRate(3) * 2
バフがかかっているほど威力アップ(投稿:tubo様)
(a.atk*4-b.def*2) * [0,1,2,3,4,5,6,7].reduce(function(r,n){return a.paramBuffRate(n)-1+r;},1)

HP半減(投稿:アリヒコット様)
//分散は0%に設定する
b.hp / 2
HPを残り1にする(投稿:アリヒコット様)
//分散は0%に設定する
b.hp - 1
敵を即死させる(投稿:アリヒコット様)
//分散は0%に設定する
b.hp * 10
最大HPの半分のダメージを与える(投稿:アリヒコット様)
//分散は0%に設定する
b.mhp - b.mhp / 2
相手のHP減少分のダメージ(投稿:アリヒコット様)
//分散は0%に設定する
b.mhp - b.hp
使用者のHP減少分のダメージ(投稿:アリヒコット様)
//分散は0%に設定する
a.mhp - a.hp
相手の最大HPの半分(切り上げ)のダメージを与える(投稿:シトラス様)
Math.ceil(b.mhp/2)
Math.ceilは、引数を切り上げた整数を返す関数です。
ちなみにMath.floor(x)で、xを小数点で切り捨てた数値を出せます。
深夜にプレイしていると、高威力技が飛んでくる(投稿:シトラス様)
[23,0,1,2,3,4].indexOf(new Date().getHours() ) !== -1 ? 9999 : 10
indexOfとは、配列の中に引数の要素があるとその位置を表す数を返し、なければ-1を返す関数です。
そしてnew Date().getHours()は、現在時間を返す構文です。
つまり、23時(午後11時)から午前4時までの間にこの技を使う敵と戦っていると9999ダメージが飛んでくる。

TP値によってダメージを変化(投稿:ネコタ様)
a.atk*(1+a.tp/100) ※a.atkは基本計算式で良い
レベルが5の倍数の敵を確実に即死させる(投稿:神無月サスケ様)
(b.level % 5 === 0) ? b.hp : 0
分散度0%、会心なし
HPを4分の1にする(投稿:神無月サスケ様)
b.hp * 3 / 4
分散度0%、会心なし
敵の体力を一桁にし、なおかつ麻痺させる(投稿:神無月サスケ様)
b.hp - (Math.randomInt(9) + 1)
分散度0%、会心なし
使用効果で麻痺のステートを付加。

敵と敏捷が近いほどダメージが増加する(投稿:エルトン様)
a.atk - ( Math.max( Math.abs( a.agi - b.agi ) - 50 , 0 ) * b.def * 0.05 )
敏捷が高い敵に大ダメージ。(投稿:エルトン様)
a.atk * ( 1 + b.agi / 100 ) - b.def
魔法防御が高い敵に特攻(投稿:エルトン様)
( a.atk + a.mat) - ( b.def - b.mdf * 0.5 )
自分のHPの残量により、最低1倍~最大5倍にダメージが増減(投稿:エルトン様)
a.atk * ( 4 - a.hp / a.mhp * 4 + 1) - b.def
敵に魔法ダメージ+状態異常によって各種属性のダメージを与える。(投稿:エルトン様)
ダメージ表示自体は魔法ダメージと属性ダメージの合計。
また、属性ダメージを与える場合、自身の各種ステータスが増加する。
毒の場合は、水属性の魔法ダメージを与え、自身の防御を上昇させる。
複数の状態異常を与えていれば、各種属性ダメージとステータスアップは属性の数だけ加算される。
敵が暗闇~睡眠の全ての状態異常を受けている場合、
与えるダメージは非状態異常時の8倍となり(正確には属性有効度によって変化する。属性有効度が全て100%ならきっちり8倍のダメ―ジになる)
最大MPを除くすべてのステータスが上昇される。
計算式:
var temp_mat=a.mat - b.mdf;var temp_mat_base=a.mat;if(b.isStateAffected(4)){temp_mat+=Math.max(((temp_mat_base - b.mdf) * b.elementRate(5)),0);a.addBuff(3,3);}if(b.isStateAffected(5)){temp_mat+=Math.max(((temp_mat_base - b.mdf) * b.elementRate(9)),0);a.addBuff(4,3);}if(b.isStateAffected(6)){temp_mat+=Math.max(((temp_mat_base - b.mdf) * b.elementRate(3)),0);a.addBuff(5,3);}if(b.isStateAffected(7)){temp_mat+=Math.max(((temp_mat_base - b.mdf) * b.elementRate(2)),0);a.addBuff(2,3);}if(b.isStateAffected(8)){temp_mat+=Math.max(((temp_mat_base - b.mdf) * b.elementRate(7)),0);a.addBuff(3,3);}if(b.isStateAffected(9)){temp_mat+=Math.max(((temp_mat_base - b.mdf) * b.elementRate(6)),0);a.addBuff(7,3);}if(b.isStateAffected(10)){temp_mat+=Math.max(((temp_mat_base - b.mdf) * b.elementRate(8)),0);a.addBuff(0,3);}temp_mat

拍手[0回]

PR
この記事にコメントする
name
title
color
mail
URL
comment
pass   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
secret (チェックを入れると管理人だけに表示できます)
広告枠
アクセス解析

ATOM  
ATOM 
RSS  
RSS 


ソフトウェア制作講座





Copyright ©   YUWAKA'S SOFT   All Rights Reserved
Design by MMIT / TemplateB3  Powered by NINJA TOOLS
忍者ブログ [PR]