/*--------------------------------------------------------------------------  ステータス画面右のウィンドウに支援値を表示するスクリプト ■概要 ステータス画面右にあるセンテンスウィンドウで、 攻撃、命中、回避、必殺、必殺回避、守備&魔防に関する支援値をボーナス形式で表示します。 元々必殺回避と守備&魔防は表示されていなかったので追加しました。 これによってウィンドウが狭くなったので行間を詰めてます。  不細工だから行間を戻したいという場合   ・getUnitSentenceSpaceY()のreturn 25の行が有効になるようにしてください  必殺回避、守備&魔防は不要という場合   ・_configureSentence()の『不要ならコメントアウトしてください』とある行をコメントアウトしてください 15/08/11 新規作成 15/10/26 1.036対応 15/10/26 1.037対応 15/12/08 1.045対応 16/01/13 1.049対応 16/03/29 1.068対応 16/05/19 数値の表示位置を変えやすいように設定を追加 16/05/19b UNIT_SENTENCE_SUPPORT_VALUE_POS_XとUNIT_SENTENCE_SIGN_POS_Xによる表示位置補正処理を修正し、両方の値が絡まないようにした ■対応バージョン  SRPG Studio Version:1.068 ■規約 ・利用はSRPG Studioを使ったゲームに限ります。 ・商用・非商用問いません。フリーです。 ・加工等、問題ありません。どんどん改造してください。 ・クレジット明記無し OK ・再配布、転載 OK ・SRPG Studio利用規約は遵守してください。 --------------------------------------------------------------------------*/ (function() { //-------------------------------------------- // 設定 //-------------------------------------------- // 必殺回避の欄のテキスト(元々無いのでここで定義しています) var UNIT_SENTENCE_CRITICAL_AVOID = '必回' // 上ウィンドウのセンテンス情報表示基準座標への補正値 var UNIT_SENTENCE_POS_X = 0; // 上ウィンドウの左上X座標に加算・補正する値 var UNIT_SENTENCE_POS_Y = 0; // 上ウィンドウの左上Y座標に加算・補正する値 // センテンス情報への補正値 var UNIT_SENTENCE_UNIT_VALUE_POS_X = 80; // 攻撃などユニットの値のX座標 var UNIT_SENTENCE_SUPPORT_VALUE_POS_X = 40; // 攻撃などへの支援値のX座標 var UNIT_SENTENCE_SIGN_POS_X = 12; // +-の符号のX座標 //-------------------------------------------- // UnitMenuScreenクラス //-------------------------------------------- // メニュー画面 スクリーンデータの設定 var alias0 = UnitMenuScreen._prepareScreenMemberData; UnitMenuScreen._prepareScreenMemberData= function(screenParam) { alias0.call(this, screenParam); if (this._isUnitSentenceVisible()) { this._unitSentenceWindow = null; this._unitSentenceWindow = createObject(UnitSentenceWindowEx); // 新規クラスに置き換えた } }; //-------------------------------------------- // UnitSentenceWindowExクラス //-------------------------------------------- // センテンスウィンドウ var UnitSentenceWindowEx = defineObject(UnitSentenceWindow, // UnitSentenceWindowの派生クラス { // センテンスウィンドウの行間(詰めた) getUnitSentenceSpaceY: function() { return 26; // こちらを有効にすれば行間は元に戻ります }, // センテンスウィンドウの表示項目 _configureSentence: function(groupArray) { groupArray.appendObject(UnitSentence.Power); groupArray.appendObject(UnitSentence.Def); // 追加(不要ならコメントアウトしてください) groupArray.appendObject(UnitSentence.Hit); groupArray.appendObject(UnitSentence.Avoid); groupArray.appendObject(UnitSentence.Critical); groupArray.appendObject(UnitSentence.CriAvoid); //groupArray.appendObject(UnitSentence.Range); groupArray.appendObject(UnitSentence.Mov); // if (DataConfig.isItemWeightDisplayable()) { // } groupArray.appendObject(UnitSentence.State); // groupArray.appendObject(UnitSentence.Support); }, getWindowHeight: function() { return 84 + 8 + DefineControl.getUnitMenuBottomWindowHeight() - 56; } } ); //-------------------------------------------- // BaseUnitSentenceクラス //-------------------------------------------- // センテンスウィンドウでの数値描画(攻撃~魔防力までで使用) BaseUnitSentence.drawAbilityText= function(x, y, text, value, isValid, value2, isValid2) { var textui = this.getUnitSentenceTextUI(); var color = textui.getColor(); var font = textui.getFont(); var colorIndex = 1; var length = -1; x += UNIT_SENTENCE_POS_X; y += UNIT_SENTENCE_POS_Y; TextRenderer.drawKeywordText(x, y, text, length, color, font); x += UNIT_SENTENCE_UNIT_VALUE_POS_X; if (isValid) { if (value < 0) { TextRenderer.drawSignText(x - 24, y, ' - '); value *= -1; } NumberRenderer.drawNumberColor(x, y, value, colorIndex, 255); } else { TextRenderer.drawSignText(x - 5, y, StringTable.SignWord_Limitless); } // x += UNIT_SENTENCE_SUPPORT_VALUE_POS_X; if (isValid2) { if (value2 > 0) { TextRenderer.drawSignText(x + UNIT_SENTENCE_SIGN_POS_X, y, ' + '); } else if (value2 < 0) { TextRenderer.drawSignText(x + UNIT_SENTENCE_SIGN_POS_X, y, ' - '); value2 *= -1; } NumberRenderer.drawNumberColor(x + UNIT_SENTENCE_SUPPORT_VALUE_POS_X + 6, y, value2, colorIndex, 255); } }; // 攻撃力の値設定 UnitSentence.Power.setCalculatorValue= function(unit, weapon, totalStatus) { if (weapon !== null) { // drawUnitSentenceで毎回呼び出さないように保存 this._value = AbilityCalculator.getPower(unit, weapon); } }; // 攻撃力の値描画 UnitSentence.Power.drawUnitSentence= function(x, y, unit, weapon, totalStatus) { var value = 0; var isValid = false; var value2 = 0; var isValid2 = false; if (weapon !== null) { value = this._value; if (value < 0) { value = 0; } isValid = true; value2 = totalStatus.powerTotal; // 支援値 if (StateControl.getTurnState(unit, StateControl._getState(8))) { var down = Math.ceil(value * (POW_DOWN * 3) / 100.0); value2 -= down; value += down; } else if (StateControl.getTurnState(unit, StateControl._getState(7))) { var down = Math.ceil(value * (POW_DOWN * 2) / 100.0); value2 -= down; value += down; } else if (StateControl.getTurnState(unit, StateControl._getState(6))) { var down = Math.ceil(value * (POW_DOWN * 1) / 100.0); value2 -= down; value += down; } if ( value2 != 0 ) { isValid2 = true; } } this.drawAbilityText(x, y, root.queryCommand('attack_capacity'), value, isValid, value2, isValid2); }; // 命中の値設定 UnitSentence.Hit.setCalculatorValue= function(unit, weapon, totalStatus) { if (weapon !== null) { this._value = AbilityCalculator.getHit(unit, weapon); } }; // 命中の値描画 UnitSentence.Hit.drawUnitSentence= function(x, y, unit, weapon, totalStatus) { var value = 0; var isValid = false; var value2 = 0; var isValid2 = false; if (weapon !== null) { value = this._value; if (value < 0) { value = 0; } isValid = true; value2 = totalStatus.hitTotal; // 支援値 if ( value2 != 0 ) { isValid2 = true; } } this.drawAbilityText(x, y, root.queryCommand('hit_capacity'), value, isValid, value2, isValid2); }; // 必殺の値設定 UnitSentence.Critical.setCalculatorValue= function(unit, weapon, totalStatus) { if (weapon !== null) { this._value = AbilityCalculator.getCritical(unit, weapon); } }; // 必殺の値描画 UnitSentence.Critical.drawUnitSentence= function(x, y, unit, weapon, totalStatus) { var value = 0; var isValid = false; var value2 = 0; var isValid2 = false; if (weapon !== null) { if (Miscellaneous.isCriticalAllowed(unit, null)) { value = this._value; if (value < 0) { value = 0; } value2 = 0;//totalStatus.criticalTotal; // 支援値 if ( value2 != 0 ) { isValid2 = true; } } isValid = true; } this.drawAbilityText(x, y, root.queryCommand('critical_capacity'), value, isValid, value2, isValid2); }; AbilityCalculator.getAvoidTerrain = function(unit) { var cls = unit.getClass(); if (cls.getClassType().isTerrainBonusEnabled()) { var terrain = PosChecker.getTerrainFromPos(unit.getMapX(), unit.getMapY()); if (terrain !== null) { return terrain.getAvoid(); } } return 0; }; // 回避の値設定 UnitSentence.Avoid.setCalculatorValue= function(unit, weapon, totalStatus) { this._terrain = AbilityCalculator.getAvoidTerrain(unit); this._value = AbilityCalculator.getAvoid(unit) - this._terrain; }; // 回避の値描画 UnitSentence.Avoid.drawUnitSentence= function(x, y, unit, weapon, totalStatus) { var value = this._value; var isValid = true; var value2 = 0; var isValid2 = false; value2 = totalStatus.avoidTotal; // 支援値 if (StateControl.getTurnState(unit, StateControl._getState(8))) { value2 -= AVOID_DOWN * 3; value += AVOID_DOWN * 3; } else if (StateControl.getTurnState(unit, StateControl._getState(7))) { value2 -= AVOID_DOWN * 2; value += AVOID_DOWN * 2; } else if (StateControl.getTurnState(unit, StateControl._getState(6))) { value2 -= AVOID_DOWN; value += AVOID_DOWN; } if (this._terrain > 0) { value2 += this._terrain; } if ( value2 != 0 ) { isValid2 = true; } this.drawAbilityText(x, y, root.queryCommand('avoid_capacity'), value, isValid, value2, isValid2); }; // 必殺回避の値設定(新規作成) UnitSentence.CriticalAvoid = defineObject(BaseUnitSentence, { _value: 0, setCalculatorValue: function(unit, weapon, totalStatus) { this._value = AbilityCalculator.getCriticalAvoid(unit); }, drawUnitSentence: function(x, y, unit, weapon, totalStatus) { var value = 0; var isValid = false; var value2 = 0; var isValid2 = false; value = this._value; if (value < 0) { value = 0; } isValid = true; value2 = totalStatus.criticalAvoidTotal; // 支援値 if ( value2 != 0 ) { isValid2 = true; } // 必殺回避を示すテキストは登録されていないため、本ソースで定義したものを渡している this.drawAbilityText(x, y, UNIT_SENTENCE_CRITICAL_AVOID, value, isValid, value2, isValid2); } } ); // 守備力の値設定(新規作成) UnitSentence.Def = defineObject(BaseUnitSentence, { _value: 0, setCalculatorValue: function(unit, weapon, totalStatus) { this._value = ParamBonus.getDef(unit); }, drawUnitSentence: function(x, y, unit, weapon, totalStatus) { var value = 0; var isValid = false; var value2 = 0; var isValid2 = false; value = this._value; if (value < 0) { value = 0; } isValid = true; value2 = totalStatus.defenseTotal; // 支援値 if ( value2 != 0 ) { isValid2 = true; } this.drawAbilityText(x, y, root.queryCommand('def_param'), value, isValid, value2, isValid2); } } ); // 魔防力の値設定(新規作成) UnitSentence.Mdf = defineObject(BaseUnitSentence, { _value: 0, setCalculatorValue: function(unit, weapon, totalStatus) { this._value = ParamBonus.getMdf(unit); }, drawUnitSentence: function(x, y, unit, weapon, totalStatus) { var value = 0; var isValid = false; var value2 = 0; var isValid2 = false; value = this._value; if (value < 0) { value = 0; } isValid = true; value2 = totalStatus.defenseTotal; // 支援値 if ( value2 != 0 ) { isValid2 = true; } this.drawAbilityText(x, y, root.queryCommand('mdf_param'), value, isValid, value2, isValid2); } } ); UnitSentence.Mov = defineObject(BaseUnitSentence, { _value: 0, setCalculatorValue: function(unit, weapon, totalStatus) { this._value = ParamBonus.getMov(unit); }, drawUnitSentence: function(x, y, unit, weapon, totalStatus) { var value = 0; var isValid = false; var value2 = 0; var isValid2 = false; value = this._value; if (value < 0) { value = 0; } isValid = true; value2 = 0; // 支援値 if ( value2 != 0 ) { isValid2 = true; } this.drawAbilityText(x, y, root.queryCommand('mov_param'), value, isValid, value2, isValid2); } } ); // 攻撃範囲の値設定(数値の描画位置が変化したため修正した) UnitSentence.Range.drawUnitSentence= function(x, y, unit, weapon, totalStatus) { var startRange, endRange; var textui = this.getUnitSentenceTextUI(); var color = textui.getColor(); var font = textui.getFont(); var length = -1; var colorIndex = 1; var alpha = 255; x += UNIT_SENTENCE_POS_X; y += UNIT_SENTENCE_POS_Y; TextRenderer.drawKeywordText(x, y, root.queryCommand('range_capacity'), length, color, font); x += UNIT_SENTENCE_UNIT_VALUE_POS_X; if (weapon === null) { TextRenderer.drawSignText(x - 5, y, StringTable.SignWord_Limitless); return; } startRange = weapon.getStartRange(); endRange = weapon.getEndRange(); if (startRange === endRange) { NumberRenderer.drawNumberColor(x, y, startRange, colorIndex, alpha); } else { NumberRenderer.drawNumberColor(x, y, startRange, colorIndex, alpha); TextRenderer.drawKeywordText(x + 14, y, StringTable.SignWord_WaveDash, -1, color, font); NumberRenderer.drawNumberColor(x + 35, y, endRange, colorIndex, alpha); } }; UnitSentence.State.drawUnitSentence = function(x, y, unit, weapon, totalStatus) { var i, state, turnState; var count = this._arr.length; var xPrev = x; y += 10; var downStateList = [6, 7, 8]; for (i = 0; i < count; i++) { turnState = this._arr[i]; state = turnState.getState(); GraphicsRenderer.drawImage(x, y, state.getIconResourceHandle(), GraphicsType.ICON); x += GraphicsFormat.ICON_WIDTH + 6; var font = root.getBaseData().getFontList().getData(10); TextRenderer.drawKeywordText(x - 4, y + 1, state.getName(), -1, ColorValue.DEFAULT, font); x += 66; if (turnState.getTurn() !== 0) { if (downStateList.indexOf(state.getId()) < 0) { NumberRenderer.drawNumber(x, y, turnState.getTurn()); } } else { TextRenderer.drawSignText(x, y, StringTable.SignWord_Limitless); } x += 16; x = xPrev; y += this._unitSentenceWindow.getUnitSentenceSpaceY(); } }; UnitSentence.CriAvoid = defineObject(BaseUnitSentence, { _value: 0, setCalculatorValue: function(unit, weapon, totalStatus) { this._value = AbilityCalculator.getCriticalAvoid(unit); }, drawUnitSentence: function(x, y, unit, weapon, totalStatus) { var value = this._value; var isValid = true; var value2 = 0; var isValid2 = false; value2 = totalStatus.criticalAvoidTotal; // 支援値 if ( value2 != 0 ) { isValid2 = true; } this.drawAbilityText(x, y, 'G. EVA', value, isValid, value2, isValid2); } } ); })();