slave-princess-charlotte/data/Plugin/unitmenu_sentence_ex.js
2025-10-19 17:12:41 -05:00

556 lines
No EOL
15 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*--------------------------------------------------------------------------
 ステータス画面右のウィンドウに支援値を表示するスクリプト
■概要
ステータス画面右にあるセンテンスウィンドウで、
攻撃、命中、回避、必殺、必殺回避、守備&魔防に関する支援値をボーナス形式で表示します。
元々必殺回避と守備&魔防は表示されていなかったので追加しました。
これによってウィンドウが狭くなったので行間を詰めてます。
 不細工だから行間を戻したいという場合
  ・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);
}
}
);
})();