591 lines
25 KiB
JavaScript
591 lines
25 KiB
JavaScript
class _BtlEnst {
|
|
constructor() {
|
|
this.Dmg = 0;
|
|
this.CltDmgFlg = false;
|
|
this.c_atk = 0;
|
|
this.c_def = 0;
|
|
this.c_hit = 0;
|
|
this.c_avo = 0;
|
|
}
|
|
}
|
|
let 被弾コモン_命中Flg = false;
|
|
let 被弾コモン_ダメージ量 = 0;
|
|
let _Btl_PL回避成功 = false;
|
|
Game_Interpreter.prototype.N_Btl_SkillUse = function () {
|
|
被弾コモン_命中Flg = false;
|
|
被弾コモン_ダメージ量 = 0;
|
|
NPlayer.AtkRpt--;
|
|
NEnemy.AtkRpt--;
|
|
NPlayer.Enst = new _BtlEnst();
|
|
NEnemy.Enst = new _BtlEnst();
|
|
let _PlSkillNo = NPlayer.DO_Arr[KsnTurn];
|
|
let _EmSkillNo = NEnemy.DO_Arr[KsnTurn];
|
|
NPlayer.Skill = $dataSkills[_PlSkillNo];
|
|
NEnemy.Skill = $dataSkills[_EmSkillNo];
|
|
if (NPlayer.Skill != undefined) NPlayer.stype = NPlayer.Skill.stypeId;
|
|
if (NEnemy.Skill != undefined) NEnemy.stype = NEnemy.Skill.stypeId;
|
|
this.SkillTpCk();
|
|
this.Skill_StateSkillSet();
|
|
if (NPlayer.AtkRpt >= 0) {
|
|
UseTp = NPlayer.UseTp;
|
|
UseCost = NPlayer.UseCost;
|
|
if (_Btl_TutorialNo != -1) {
|
|
DmgSkillSet_強制命中Flg = _Tuto_強制命中[KsnTurn];
|
|
}
|
|
if (this.DmgSkillSet(NPlayer, NEnemy)) {
|
|
PLAllMissFlg = false;
|
|
NPlayer._tp += 1;
|
|
let _相性 = Skill相性Ck(_PlSkillNo, _EmSkillNo);
|
|
if (_相性 == _相性結果.Win) {
|
|
if ($dataSkills[_PlSkillNo].stypeId == _Stype._Atk) {
|
|
}
|
|
}
|
|
}
|
|
if (NPlayer.Skill.damage.elementId != _Zoku._通常攻撃) PLAllMissFlg = false;
|
|
}
|
|
if (NEnemy.Brns <= 0) {
|
|
EnAllMissFlg = false;
|
|
} else {
|
|
if (NEnemy.AtkRpt >= 0) {
|
|
UseTp = NEnemy.UseTp;
|
|
UseCost = NEnemy.UseCost;
|
|
if (this.DmgSkillSet(NEnemy, NPlayer)) {
|
|
被弾コモン_命中Flg = true;
|
|
EnAllMissFlg = false;
|
|
}
|
|
if (NEnemy.Skill.damage.type == _Dtype._Not) EnAllMissFlg = false;
|
|
}
|
|
}
|
|
let PLDmg = this.Dmg_StateCng(NPlayer);
|
|
let EmDmg = this.Dmg_StateCng(NEnemy);
|
|
let _位置乱数範囲 = 50;
|
|
NPlayer._hp -= PLDmg;
|
|
被弾コモン_ダメージ量 = PLDmg;
|
|
PlTotalDmg += PLDmg;
|
|
Rz_合計被ダメージ += PLDmg;
|
|
if (PLDmg > 0) {
|
|
NPlayer._回避成功 = false;
|
|
let _RndPsX = (Math.random() * _位置乱数範囲 * 2) - _位置乱数範囲;
|
|
let _RndPsY = (Math.random() * _位置乱数範囲 * 2) - _位置乱数範囲;
|
|
if (NPlayer.Enst.CltDmgFlg) PLDmg = SCol.Yel + PLDmg;
|
|
let _PsX = NPlayer.APos._x + 150 + _RndPsX;
|
|
let _PsY = NPlayer.APos._y + 50 + _RndPsY;
|
|
this.DmgPop_Set(PLDmg, _PsX, _PsY, 60, DmgPopTimer, 10);
|
|
} else {
|
|
let _相性 = Skill相性Ck(_PlSkillNo, _EmSkillNo);
|
|
if (_相性 == _相性結果.Win) NPlayer._回避成功 = true;
|
|
}
|
|
NEnemy._hp -= EmDmg;
|
|
EmTotalDmg += EmDmg;
|
|
if (EmDmg > 0) {
|
|
NEnemy._回避成功 = false;
|
|
Turn_DmgCnt += EmDmg;
|
|
let _RndPsX = (Math.random() * _位置乱数範囲 * 2) - _位置乱数範囲;
|
|
let _RndPsY = (Math.random() * _位置乱数範囲 * 2) - _位置乱数範囲;
|
|
if (NEnemy.Enst.CltDmgFlg) EmDmg = SCol.Yel + EmDmg;
|
|
let _PsX = NEnemy.APos._x - 160 + _RndPsX;
|
|
let _PsY = NEnemy.APos._y - 30 + _RndPsY;
|
|
this.DmgPop_Set(EmDmg, _PsX, _PsY, 60, DmgPopTimer, 10);
|
|
if (Rz_最大与ダメージ < Turn_DmgCnt) Rz_最大与ダメージ = Turn_DmgCnt;
|
|
NEnemy.Brns--;
|
|
this.N_バランス描画();
|
|
if (NEnemy.Brns <= 0) {
|
|
if (!_Brns_ブレイクFlg) this.N_バランスブレイク();
|
|
}
|
|
} else {
|
|
let _相性 = Skill相性Ck(_EmSkillNo, _PlSkillNo);
|
|
if (_相性 == _相性結果.Win) NEnemy._回避成功 = true;
|
|
}
|
|
if (NPlayer._hp <= 0) NPlayer._hp = 0;
|
|
if (NEnemy._hp <= 0) NEnemy._hp = 0;
|
|
if (DbgFlg) {
|
|
/* this.SpriteStr(PN_TestStr + 0, " 命中率:" + NPlayer.dbgArr[0], 22, 18, 729, 255);
|
|
this.SpriteStr(PN_TestStr + 1, "ダメージ:" + EmDmg, 22, 18, 759, 255);
|
|
this.SpriteStr(PN_TestStr + 2, " 命中率:" + NEnemy.dbgArr[0], 22, 1260, 12, 255);
|
|
this.SpriteStr(PN_TestStr + 3, "ダメージ:" + PLDmg, 22, 1260, 42, 255);*/
|
|
}
|
|
NPlayer.dbgArr = [0, 0, 0, 0, 0, 0, 0];
|
|
if (NPlayer._hp <= 0 && NEnemy._hp <= 0) NPlayer._hp = 1;
|
|
this.Btl_EnterStateDraw();
|
|
for (let i = KsnTurn; i <= 6 - 1; i++) {
|
|
let _SkillNo = NPlayer.DO_Arr[i];
|
|
let _HitStr = this._Txt命中被弾(i, _SkillNo);
|
|
let _HitPicNo = PN_bPLBltWin + Cnt_PN_bPLBltWin * i + 3;
|
|
this.CngSpriteStr(_HitPicNo, _HitStr);
|
|
}
|
|
if (NEnemy._hp == 0) {
|
|
if (KsnTurn < 5 && this.BtlPsv_ZokuCk(NEnemy, _Zoku._HPZeroTurn行動継続)) {
|
|
this.DmgPop_Set(SCol.Red + "HP0 Continue", NEnemy.APos._x + 40, NEnemy.APos._y + 0, 35, DmgPopTimer, 10);
|
|
} else {
|
|
WinLoseFlg = _BtlBranch.Win;
|
|
}
|
|
}
|
|
if (NPlayer._hp == 0) {
|
|
if (KsnTurn < 5 && this.BtlPsv_ZokuCk(NPlayer, _Zoku._HPZeroTurn行動継続)) {
|
|
this.DmgPop_Set(SCol.Red + "HP0 Continue", NPlayer.APos._x + 320, NPlayer.APos._y + 80, 35, DmgPopTimer, 10);
|
|
} else {
|
|
WinLoseFlg = _BtlBranch.Lose;
|
|
}
|
|
}
|
|
if (WinLoseFlg != _BtlBranch.Btl) {
|
|
NEnemy.AtkRpt = 0;
|
|
NPlayer.AtkRpt = 0;
|
|
} else {
|
|
let _CmnNo = MetaChecker(NPlayer.Skill, "被弾コモンNo", "");
|
|
if (_CmnNo != "") {
|
|
_Btl_StopCmnFlg = true;
|
|
this.SetCmnEvent(Number(_CmnNo));
|
|
}
|
|
}
|
|
}
|
|
Game_Interpreter.prototype.PlayerダメージPop = function (_dmgValue, _位置乱数範囲) {
|
|
_位置乱数範囲 = typeof _位置乱数範囲 !== 'undefined' ? _位置乱数範囲 : 50;
|
|
let _RndPsX = (Math.random() * _位置乱数範囲 * 2) - _位置乱数範囲;
|
|
let _RndPsY = (Math.random() * _位置乱数範囲 * 2) - _位置乱数範囲;
|
|
let _PsX = NPlayer.APos._x + 150 + _RndPsX;
|
|
let _PsY = NPlayer.APos._y + 50 + _RndPsY;
|
|
this.DmgPop_Set(_dmgValue, _PsX, _PsY, 60, DmgPopTimer, 10);
|
|
}
|
|
Game_Interpreter.prototype.EnemyダメージPop = function (_dmgValue, _位置乱数範囲) {
|
|
_位置乱数範囲 = typeof _位置乱数範囲 !== 'undefined' ? _位置乱数範囲 : 50;
|
|
let _RndPsX = (Math.random() * _位置乱数範囲 * 2) - _位置乱数範囲;
|
|
let _RndPsY = (Math.random() * _位置乱数範囲 * 2) - _位置乱数範囲;
|
|
let _PsX = NEnemy.APos._x - 160 + _RndPsX;
|
|
let _PsY = NEnemy.APos._y - 30 + _RndPsY;
|
|
this.DmgPop_Set(_dmgValue, _PsX, _PsY, 60, DmgPopTimer, 10);
|
|
}
|
|
Game_Interpreter.prototype.Btl_結果再確認 = function () {
|
|
this.Btl_EnterStateDraw();
|
|
if (NEnemy._hp == 0) {
|
|
if (KsnTurn < 5 && this.BtlPsv_ZokuCk(NEnemy, _Zoku._HPZeroTurn行動継続)) {
|
|
this.DmgPop_Set(SCol.Red + "HP0 Continue", NEnemy.APos._x + 40, NEnemy.APos._y + 0, 35, DmgPopTimer, 10);
|
|
} else {
|
|
WinLoseFlg = _BtlBranch.Win;
|
|
}
|
|
}
|
|
if (NPlayer._hp == 0) {
|
|
if (KsnTurn < 5 && this.BtlPsv_ZokuCk(NPlayer, _Zoku._HPZeroTurn行動継続)) {
|
|
this.DmgPop_Set(SCol.Red + "HP0 Continue", NPlayer.APos._x + 320, NPlayer.APos._y + 80, 35, DmgPopTimer, 10);
|
|
} else {
|
|
WinLoseFlg = _BtlBranch.Lose;
|
|
}
|
|
}
|
|
}
|
|
Game_Interpreter.prototype.Btl_EnterStateDraw = function () {
|
|
this.N_Btl_PlStView(1150, 647);
|
|
this.N_Btl_EmStView(30, 7);
|
|
}
|
|
let _Brns_ブレイク数 = 0;
|
|
let _Brns_ブレイクFlg = false;
|
|
const STN_ブレイク = 150;
|
|
Game_Interpreter.prototype.N_バランスブレイク = function () {
|
|
if (_Brns_ブレイク数 > 0) return;
|
|
_Brns_ブレイクFlg = true;
|
|
_Brns_ブレイク数 = NEnemy.Brns_崩れ数;
|
|
NEnemy.state.push(new _State(STN_ブレイク, _Brns_ブレイク数));
|
|
for (let i = KsnTurn; i <= 6 - 1; i++) {
|
|
let _CngPictNo = PN_bEmBltWin + (i * Cnt_PN_bEmBltWin);
|
|
this.CngSprite(_CngPictNo, BtlPic + "PN_bEmBltWin_Brns");
|
|
this.DelSprite(_CngPictNo + 1);
|
|
this.DelSprite(_CngPictNo + 2);
|
|
NEnemy.DO_Arr[i] = -1;
|
|
_Brns_ブレイク数--;
|
|
if (_Brns_ブレイク数 <= 0) break;
|
|
}
|
|
this.Btl_敵画像変更(true);
|
|
this.BLogAdd(120, SCol.Yel + NEnemy.Name + " has entered a break state!!");
|
|
};
|
|
Game_Interpreter.prototype.Dmg_StateCng = function (_AChara) {
|
|
let _rtDmg = _AChara.Enst.Dmg;
|
|
let _被ダメCmnNos = [];
|
|
for (let i = 0; i <= _AChara.state.length - 1; i++) {
|
|
let _ckst = $dataStates[_AChara.state[i]._No];
|
|
for (let j = 0; j <= _ckst.traits.length - 1; j++) {
|
|
switch (_ckst.traits[j].code) {
|
|
case 11:
|
|
switch (_ckst.traits[j].dataId) {
|
|
case _Zoku._被ダメージ変化:
|
|
let _val = _ckst.traits[j].value;
|
|
_rtDmg = Math.floor(_rtDmg * _val);
|
|
break;
|
|
case _Zoku._被ダメ時コモン発生:
|
|
if (_rtDmg > 0) {
|
|
_Btl_StopCmnFlg = true;
|
|
let _cmnNo = Math.floor(_ckst.traits[j].value * 100);
|
|
_被ダメCmnNos.push(_cmnNo)
|
|
}
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (_rtDmg == 0) return _rtDmg;
|
|
for (let i = 0; i < _被ダメCmnNos.length; i++) this.SetCmnEventSc(_被ダメCmnNos[i]);
|
|
_AChara.PsvArr.forEach(_AmmId => {
|
|
let _Armor = $dataArmors[_AmmId];
|
|
for (let i = 0; i <= _Armor.traits.length - 1; i++) {
|
|
if (_Armor.traits[i].code != 11) continue;
|
|
let _Var = Math.floor(_Armor.traits[i].value * 100) - 100;
|
|
switch (_Armor.traits[i].dataId) {
|
|
case _Zoku._オートガード:
|
|
if (_Var >= Math.random() * 100) {
|
|
_rtDmg = Math.round(_rtDmg * 0.7);
|
|
this.DmgPop_Set(SCol.Yel + "Auto Guard", _AChara.APos._x - 30, _AChara.APos._y - 40, 35, DmgPopTimer, 10);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
return _rtDmg;
|
|
}
|
|
Game_Interpreter.prototype.Skill_StateSkillSet = function () {
|
|
this.Skill_StateSet(NPlayer, 1);
|
|
this.Skill_StateSet(NEnemy, 1);
|
|
}
|
|
Game_Interpreter.prototype.Skill_StateTurnUp = function () {
|
|
for (let i = 0; i <= NPlayer.state.length - 1; i++) {
|
|
if (NPlayer.state[i]._Turn != -1) {
|
|
NPlayer.state[i]._Turn--;
|
|
if (NPlayer.state[i]._Turn == 0) {
|
|
NPlayer.state.splice(i, 1);
|
|
i--;
|
|
}
|
|
}
|
|
}
|
|
for (let i = 0; i <= NEnemy.state.length - 1; i++) {
|
|
if (NEnemy.state[i]._Turn != -1) {
|
|
NEnemy.state[i]._Turn--;
|
|
if (NEnemy.state[i]._Turn == 0) {
|
|
NEnemy.state.splice(i, 1);
|
|
i--;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Game_Interpreter.prototype.Skill_StateSet = function (_AChara, _優先度, _PopFlg) {
|
|
_PopFlg = typeof _PopFlg !== 'undefined' ? _PopFlg : true;
|
|
if (_AChara.Skill == undefined) return;
|
|
if (_AChara.Skill.damage.type == 1) return;
|
|
let _stList = _AChara.Skill.effects;
|
|
for (let i = 0; i <= _stList.length - 1; i++) {
|
|
if (_stList[i].code != 21) continue;
|
|
switch (_stList[i].dataId) {
|
|
case _StateDt._コスト削り:
|
|
break;
|
|
case _StateDt._デバフ解除:
|
|
if (_PopFlg) {
|
|
this.State_デバフ解除(_AChara, Math.round(_stList[i].value1 * 100 - 100));
|
|
this.Btl_Enter異常描画();
|
|
}
|
|
break;
|
|
default:
|
|
this.State_Setting(_AChara, _stList[i].dataId, _優先度, _PopFlg);
|
|
}
|
|
}
|
|
}
|
|
Game_Interpreter.prototype.State_Setting = function (_Chara, _StNo, _優先度, _PopFlg) {
|
|
let _ckst = $dataStates[_StNo];
|
|
if (_ckst.priority == _優先度) {
|
|
let _addFlg = true;
|
|
let _No = -1;
|
|
for (let j = 0; j <= _Chara.state.length - 1; j++) {
|
|
if (_ckst.id == _Chara.state[j]._No) {
|
|
_addFlg = false;
|
|
_No = j;
|
|
break;
|
|
}
|
|
}
|
|
if (_addFlg) {
|
|
_Chara.state.push(new _State(_ckst.id, _ckst.stepsToRemove));
|
|
} else { //ターンリセット(すでに追加されていた場合)
|
|
_Chara.state[_No]._Turn = _ckst.stepsToRemove;
|
|
}
|
|
let _PopXZure = 0;
|
|
let _PopYZure = _drawPlPopCnt * 51;
|
|
if (_Chara.EmFlg) {
|
|
_PopXZure = -160;
|
|
_PopYZure = _drawEmPopCnt * 51;
|
|
}
|
|
if (_PopFlg) {
|
|
this.DmgPop_Set("\\I[" + _ckst.iconIndex + "] " + _ckst.name,
|
|
_Chara.APos._x + _PopXZure, _Chara.APos._y + 100 + _PopYZure, 25, 90, 10, 150);
|
|
if (_Chara.EmFlg) _drawEmPopCnt++;
|
|
else _drawPlPopCnt++;
|
|
}
|
|
}
|
|
}
|
|
Game_Interpreter.prototype.State_デバフ解除 = function (_Chara, _Cnt) {
|
|
let _ckCnt = _Cnt;
|
|
for (let i = _Chara.state.length - 1; i >= 0; i--) {
|
|
let _ckst = $dataStates[_Chara.state[i]._No];
|
|
if (MetaChecker(_ckst, "デバフ", null) != null) {
|
|
_Chara.state.splice(i, 1);
|
|
_ckCnt--;
|
|
if (_ckCnt == 0) return;
|
|
}
|
|
}
|
|
}
|
|
Game_Interpreter.prototype.SkillTpCk = function () {
|
|
if (NPlayer.stype == NEnemy.stype) return;
|
|
switch (NPlayer.stype) {
|
|
case _Stype._Atk:
|
|
if (NEnemy.stype == _Stype._Taiki) NPlayer._tp += 2;
|
|
if (NEnemy.stype == _Stype._Def) NPlayer._tp -= 2;
|
|
break;
|
|
case _Stype._Def:
|
|
if (NEnemy.stype == _Stype._Atk) NPlayer._tp += 2;
|
|
if (NEnemy.stype == _Stype._Taiki) NPlayer._tp -= 2;
|
|
break;
|
|
case _Stype._Taiki:
|
|
if (NEnemy.stype == _Stype._Def) NPlayer._tp += 2;
|
|
if (NEnemy.stype == _Stype._Atk) NPlayer._tp -= 2;
|
|
break;
|
|
}
|
|
}
|
|
let UseCost = 0;
|
|
let DmgSkillSet_強制命中Flg = -1;
|
|
Game_Interpreter.prototype.DmgSkillSet = function (_AChara, _BChara) {
|
|
let _AtkHitFlg = false;
|
|
let _AtkSkill = _AChara.Skill;
|
|
if (_AtkSkill == undefined) return;
|
|
switch (_AtkSkill.damage.elementId) {
|
|
case _Zoku._通常攻撃:
|
|
if (_AtkSkill.damage.type == _Dtype._HPDmg) {
|
|
if (_Skill_State存在Ck(_AtkSkill.id, _StateDt._カウンター)) {
|
|
if (_BChara.Skill == undefined) return;
|
|
if (Skill相性Ck(_AtkSkill.id, _BChara.Skill.id) != _相性結果.Win) {
|
|
return;
|
|
}
|
|
}
|
|
let _命中判定 = HitKeisan(_AChara, _BChara);
|
|
let _命中Flg = (_命中判定 > Math.random() * 100);
|
|
if (DmgSkillSet_強制命中Flg != -1) _命中Flg = (DmgSkillSet_強制命中Flg == 1);
|
|
if (_命中Flg) {
|
|
let _技の威力 = Math.floor(eval(_AtkSkill.damage.formula));
|
|
let _クリティカル補正 = 1;
|
|
if (_AtkSkill.damage.critical) {
|
|
if (Math.random() * 100 < _AtkSkill.damage.variance) {
|
|
if (_Btl_TutorialNo == -1) {
|
|
_BChara.Enst.CltDmgFlg = true;
|
|
_クリティカル補正 = 1.5;
|
|
}
|
|
}
|
|
}
|
|
let _パラメータ補正 = _AChara.b_atk / _BChara.b_def;
|
|
let _攻撃力レベル = Math.floor(_AChara.b_atk / 50) + 1;
|
|
let _攻撃力レベル補正 = factorial(1.1, (_攻撃力レベル - 2));
|
|
if (_攻撃力レベル補正 < 1) _攻撃力レベル補正 = 1;
|
|
let _テンション補正 = 1;
|
|
if (TH_ModeFlg) {
|
|
let _TPar100 = (_AChara._tp / 100);
|
|
_テンション補正 = 1 + 1 * (_TPar100 * _TPar100);
|
|
}
|
|
let _Dmg1 = (((_技の威力 * _クリティカル補正) * _パラメータ補正) * _攻撃力レベル補正) * _テンション補正;
|
|
let _Dmg = Math.floor(_Dmg1 / 2);
|
|
_AChara.PsvArr.forEach(_AmmId => {
|
|
let _Armor = $dataArmors[_AmmId];
|
|
for (let i = 0; i <= _Armor.traits.length - 1; i++) {
|
|
if (_Armor.traits[i].code != 11) continue;
|
|
let _Var = Math.floor(_Armor.traits[i].value * 100) - 100;
|
|
switch (_Armor.traits[i].dataId) {
|
|
case _Zoku._連続攻撃威力Up:
|
|
if (KsnTurn > 0) {
|
|
let _ckSkill = $dataSkills[NPlayer.DO_Arr[KsnTurn - 1]];
|
|
if (_ckSkill.stypeId == _Stype._Atk) {
|
|
_Dmg = Math.ceil(_Dmg * _Armor.traits[i].value);
|
|
}
|
|
}
|
|
break;
|
|
case _Zoku._攻vs攻威力Up:
|
|
if (_BChara.Skill != undefined) {
|
|
if (Skill相性Ck(_AtkSkill.id, _BChara.Skill.id) == _相性結果.Draw) {
|
|
_Dmg = Math.ceil(_Dmg * _Armor.traits[i].value);
|
|
}
|
|
}
|
|
break;
|
|
case _Zoku._クリ時MP変化:
|
|
if (_BChara.Enst.CltDmgFlg) {
|
|
_AChara.Do_Mp += _Var;
|
|
}
|
|
break;
|
|
case _Zoku._対ハテナテンションUp:
|
|
if (!Em_DoViewArr_OpenBef[KsnTurn]) {
|
|
_AChara._tp += _Var;
|
|
this.DmgPop_Set(SCol.Yel + "Passive: TP+" + _Var, _AChara.APos._x + 300, _AChara.APos._y - 40, 35, DmgPopTimer, 10);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
_BChara.Enst.Dmg = _Dmg;
|
|
this.PlayAnime(_AtkSkill.animationId, _BChara.APos._x, _BChara.APos._y);
|
|
_AtkHitFlg = true;
|
|
this.Skill_Effect(_AChara, _BChara);
|
|
} else {
|
|
let _PopXZure = 0;
|
|
if (_BChara.EmFlg) _PopXZure = -160;
|
|
this.DmgPop_Set(SCol.Red + "Miss", _BChara.APos._x + _PopXZure, _BChara.APos._y, 60, DmgPopTimer, 10);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
this.Skill_StateSet(_AChara, 0);
|
|
DmgSkillSet_強制命中Flg = -1;
|
|
return _AtkHitFlg;
|
|
}
|
|
Game_Interpreter.prototype.Skill_Effect = function (_AChara, _BChara) {
|
|
let _stList = _AChara.Skill.effects;
|
|
for (let i = 0; i <= _stList.length - 1; i++) {
|
|
if (_stList[i].code != 21) continue;
|
|
switch (_stList[i].dataId) {
|
|
case _StateDt._コスト削り:
|
|
let _Cost削りVar = Math.round((_stList[i].value1 - 1) * 100);
|
|
_BChara.Do_Mp -= _Cost削りVar;
|
|
let _PopXZure = 0;
|
|
if (_BChara.EmFlg) _PopXZure = -160;
|
|
this.DmgPop_Set(SCol.Red + "Cost-" + _Cost削りVar, _BChara.APos._x + _PopXZure, _BChara.APos._y, 60, DmgPopTimer, 10);
|
|
if (_BChara.Do_Mp < 0) _BChara.Do_Mp = 0;
|
|
break;
|
|
default:
|
|
this.State_Setting(_BChara, _stList[i].dataId, 1, true);
|
|
}
|
|
}
|
|
}
|
|
//命中判定(100%分率)
|
|
let HitKeisan = function (_AChara, _BChara) {
|
|
//{30+[(命中*2)/8]-[回避/8]}+技の命中補正+(テンション/8)
|
|
let _命中 = _AChara.b_hit;
|
|
let _回避 = _BChara.b_avo;
|
|
let _テンション = _AChara._tp;
|
|
let _技の命中補正 = _AChara.Skill.speed;
|
|
let _テンション補正 = 0;
|
|
if (TH_ModeFlg) _テンション補正 = (_テンション / 8);
|
|
let _最終命中 = (50 + (_命中 / 8) - (_回避 / 8)) + _技の命中補正 + _テンション補正;
|
|
for (let i = 0; i <= _AChara.state.length - 1; i++) {
|
|
let _ckst = $dataStates[_AChara.state[i]._No];
|
|
for (let j = 0; j <= _ckst.traits.length - 1; j++) {
|
|
switch (_ckst.traits[j].code) {
|
|
case 11:
|
|
switch (_ckst.traits[j].dataId) {
|
|
case _Zoku._命中率変化:
|
|
let _val = _ckst.traits[j].value;
|
|
_最終命中 *= _val;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
for (let i = 0; i <= _BChara.state.length - 1; i++) {
|
|
let _ckst = $dataStates[_BChara.state[i]._No];
|
|
for (let j = 0; j <= _ckst.traits.length - 1; j++) {
|
|
switch (_ckst.traits[j].code) {
|
|
case 11:
|
|
switch (_ckst.traits[j].dataId) {
|
|
case _Zoku._被命中率変化:
|
|
let _val = _ckst.traits[j].value;
|
|
_最終命中 *= _val;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (_BChara.Skill != null) {
|
|
if (_BChara.Skill.stypeId == _Stype._Taiki) _最終命中 += 20;
|
|
} else {
|
|
_最終命中 += 20;
|
|
}
|
|
_AChara.PsvArr.forEach(_AmmId => {
|
|
let _Armor = $dataArmors[_AmmId];
|
|
for (let i = 0; i <= _Armor.traits.length - 1; i++) {
|
|
switch (_Armor.traits[i].code) {
|
|
case 22:
|
|
if (_Armor.traits[i].dataId == 0) {
|
|
_最終命中 += Math.floor(_Armor.traits[i].value * 100);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
_最終命中 -= Math.floor(_PsvVarGet(_BChara, 22, 1) * 100);
|
|
if (_最終命中 > 100) _最終命中 = 100;
|
|
_AChara.dbgArr[0] = _最終命中;
|
|
return _最終命中;
|
|
}
|
|
let _PsvVarGet = function (_AChara, _caseNo, _dataId) {
|
|
let _RtnVar = 0;
|
|
_AChara.PsvArr.forEach(_AmmId => {
|
|
let _Armor = $dataArmors[_AmmId];
|
|
for (let i = 0; i <= _Armor.traits.length - 1; i++) {
|
|
switch (_Armor.traits[i].code) {
|
|
case _caseNo:
|
|
if (_Armor.traits[i].dataId == _dataId) {
|
|
_RtnVar += _Armor.traits[i].value;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
});
|
|
return _RtnVar;
|
|
}
|
|
let DmgFormula = function (_sikiStr, _AChara, _BChara) {
|
|
let a = _AChara;
|
|
let b = _BChara;
|
|
return _Dmgvar = Math.floor(eval(_sikiStr));
|
|
}
|
|
let NB_DmgPopUpdate = Game_Interpreter.prototype.NUpdate;
|
|
Game_Interpreter.prototype.NUpdate = function () {
|
|
NB_DmgPopUpdate.call(this);
|
|
this.DmgPop_Update();
|
|
}
|
|
class _DmgPop {
|
|
constructor(_PicNo, _pX, _pY, _ViewFlame, _PopY) {
|
|
this._PicNo = _PicNo;
|
|
this._pX = _pX;
|
|
this._pY = _pY;
|
|
this._ViewFlame = _ViewFlame;
|
|
this._PopY = _PopY;
|
|
}
|
|
}
|
|
let DmgPopArr = [];
|
|
Game_Interpreter.prototype.DmgPop_Update = function () {
|
|
for (let i = 0; i <= DmgPopArr.length - 1; i++) {
|
|
DmgPopArr[i]._ViewFlame--;
|
|
if (DmgPopArr[i]._ViewFlame == 10) {
|
|
this.MoveSprite(PN_bDmgPop + DmgPopArr[i]._PicNo,
|
|
DmgPopArr[i]._pX, DmgPopArr[i]._pY, 10, 0, true, true);
|
|
}
|
|
if (DmgPopArr[i]._ViewFlame <= 0) {
|
|
this.DelSprite(PN_bDmgPop + DmgPopArr[i]._PicNo);
|
|
DmgPopArr.splice(i, 1);
|
|
i--;
|
|
}
|
|
}
|
|
}
|
|
Game_Interpreter.prototype.DmgPop_Set = function (_Str, _pX, _pY, _Size, _Time, _PopY, _mx) {
|
|
_Size = typeof _Size !== 'undefined' ? _Size : 30;
|
|
_Time = typeof _Time !== 'undefined' ? _Time : 100;
|
|
_PopY = typeof _PopY !== 'undefined' ? _PopY : 30;
|
|
_mx = typeof _mx !== 'undefined' ? _mx : 100;
|
|
let _ckArr = [];
|
|
for (let i = 0; i <= DmgPopArr.length - 1; i++) {
|
|
_ckArr.push(DmgPopArr[i]._PicNo);
|
|
}
|
|
let _PNo = 0;
|
|
for (let i = 0; i <= 9; i++) {
|
|
if (_ckArr.indexOf(i) == -1) {
|
|
_PNo = i;
|
|
}
|
|
}
|
|
D_Text_Cng_font = "Cornerstone";
|
|
let _SetDmg = new _DmgPop(_PNo, _pX, _pY, _Time, _PopY);
|
|
DmgPopArr.push(_SetDmg);
|
|
_Str = "\\ow[5]\\oc[rgba(0,0,0,1)]" + _Str;
|
|
this.SpriteStr(PN_bDmgPop + _PNo, " " + _Str + " ", _Size, _pX, _pY + 50, 0, _mx, _mx);
|
|
EasingStr = "easeOutBounce";
|
|
this.MoveSprite(PN_bDmgPop + _PNo, _pX, _pY, 50, 255, true, true);
|
|
EasingStr = "";
|
|
D_Text_Cng_font = "";
|
|
}
|