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