OMORI_Android/www.sc/js/plugins/Omori Battle System.js
2024-09-23 01:10:28 +03:00

5424 lines
205 KiB
JavaScript
Raw 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.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//=============================================================================
// TDS Omori Battle System
// Version: 1.0
//=============================================================================
// Add to Imported List
var Imported = Imported || {} ; Imported.TDS_OmoriBattleSystem = true;
// Initialize Alias Object
var _TDS_ = _TDS_ || {} ; _TDS_.OmoriBattleSystem = _TDS_.OmoriBattleSystem || {};
//=============================================================================
/*:
* @plugindesc
* Contains base functions and standards for OMORI.
*
* @author TDS
*
*/
//=============================================================================
// // DISABLE GAMEPAD AND VOLUME
// Input._updateGamepadState = function(gamepad) { };
// ConfigManager.masterVolume = 0;
// AudioManager.playSe = function(se) {};
// let intantkill = Game_Action.prototype.apply
// Game_Action.prototype.apply = function(target) {
// var result = target.result();
// this.subject().clearResult();
// result.clear();
// if (target.isActor()) {
// target.clearStates();
// target.setHp(0);
// } else {
// intantkill.call(this, target);
// }
// };
var yep_compatibilityTest = Game_Battler.prototype.startDamagePopup;
Game_Battler.prototype.startDamagePopup = function() {
this.isDamagePopupRequested();
yep_compatibilityTest.call(this);
};
Game_Party.prototype.actorIsAffectedByState = function(actorId, stateId) {
return this.members().some(function(actor) {
return actor && actor.actorId() == actorId && actor.isStateAffected(stateId);
});
};
Game_Party.prototype.getOmori = function () {
var actor = null;
for (var i = 0; i < this.battleMembers().length; i++) {
if (this.battleMembers()[i].actorId() === 1 || this.battleMembers()[i].actorId() === 8) {
actor = this.battleMembers()[i];
break;
}
}
return actor;
};
BattleManager._showEncounterEffect = true;
BattleManager.setShowEncounterEffect = function(show) {
BattleManager._showEncounterEffect = show;
}
var omori_scene_map_encounterEffectSpeed = Scene_Map.prototype.encounterEffectSpeed;
Scene_Map.prototype.encounterEffectSpeed = function() {
if (BattleManager._showEncounterEffect) return omori_scene_map_encounterEffectSpeed.call(this);
return 0;
};
//=============================================================================
// ** Scene_Boot
//-----------------------------------------------------------------------------
// The scene class for initializing the entire game.
//=============================================================================
// Alias Listing
//=============================================================================
_TDS_.OmoriBattleSystem.Scene_Boot_loadSystemImages = Scene_Boot.loadSystemImages
//=============================================================================
// * Load System Images
//=============================================================================
Scene_Boot.loadSystemImages = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Scene_Boot_loadSystemImages.call(this);
// ImageManager.reserveSystem('energy_stress_ekg_line');
// ImageManager.reserveSystem('enemy_box');
// ImageManager.reserveSystem('enemy_box_gradients')
// ImageManager.reserveSystem('ACSArrows')
// ImageManager.reserveSystem('items/i_43')
// ImageManager.reserveSystem('BattleCommands_BlackSpace')
// ImageManager.reserveSystem('ACS_Bubble')
};
//=============================================================================
// ** BattleManager
//-----------------------------------------------------------------------------
// The static class that manages battle progress.
//=============================================================================
// Alias Listing
//=============================================================================
_TDS_.OmoriBattleSystem.BattleManager_setup = BattleManager.setup;
_TDS_.OmoriBattleSystem.BattleManager_initMembers = BattleManager.initMembers;
_TDS_.OmoriBattleSystem.BattleManager_isBusy = BattleManager.isBusy;
_TDS_.OmoriBattleSystem.BattleManager_startBattle = BattleManager.startBattle;
_TDS_.OmoriBattleSystem.BattleManager_endBattle = BattleManager.endBattle;
_TDS_.OmoriBattleSystem.BattleManager_processDefeat = BattleManager.processDefeat;
_TDS_.OmoriBattleSystem.BattleManager_processAbort = BattleManager.processAbort;
_TDS_.OmoriBattleSystem.BattleManager_startTurn = BattleManager.startTurn;
//=============================================================================
// Class Variables
//=============================================================================
// BattleManager._retryObjList = ['gameTemp', 'gameSystem', 'gameTimer', 'gameMessage',
// 'gameSwitches', 'gameVariables', 'gameSelfSwitches', 'gameSelfVariables', 'gameActors',
// 'gameParty', 'gameTroop', 'gameMap', 'gamePlayer'];
BattleManager._retryObjList = ['gameTemp', 'gameSystem', 'gameTimer', 'gameMessage',
'gameSwitches', 'gameVariables', 'gameSelfSwitches', 'gameSelfVariables', 'gameActors',
'gameParty', 'gameTroop'];
// Set Battle Retried Flag
BattleManager._battleRetried = false;
// Battle Retry Setup Settings
BattleManager._battleRetrySetup = [0, true, true];
BattleManager._showDamage = true;
BattleManager._stressSpeed = 3;
BattleManager._showLowHpOverlay = true;
BattleManager._hideLowHpOverlay = false;
// Final Battle Phae Tracking
BattleManager._finalBattlePhase = 0;
//=============================================================================
// * Setup
//=============================================================================
BattleManager.setup = function(troopId, canEscape, canLose) {
// Save Setup Data
BattleManager._battleRetrySetup = [troopId, canEscape, canLose];
// If Battle has not been retried
if (!BattleManager._battleRetried) {
// Reset Final Battle Phase Tracking
BattleManager._finalBattlePhase = 0;
// Make Battle Retry Data
this.makeBattleRetryData();
};
// Run Original Function
_TDS_.OmoriBattleSystem.BattleManager_setup.call(this, troopId, canEscape, canLose);
};
//=============================================================================
// * Initialize Members
//=============================================================================
BattleManager.initMembers = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.BattleManager_initMembers.call(this);
// Set Actor Command Index
this._actorCommandIndex = 0;
// Picture Display Layer
this._pictureDisplayLayer = 'front';
// Set hide low HP overlay to false
this._hideLowHpOverlay = false;
};
//=============================================================================
// * Determine if Busy
//=============================================================================
BattleManager.isBusy = function() {
// If Battle Intro is active return true
if (this.isBattleIntroActive()) { return true; };
// Return original function
return _TDS_.OmoriBattleSystem.BattleManager_isBusy.call(this);
};
//=============================================================================
// * Start Battle
//=============================================================================
BattleManager.startBattle = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.BattleManager_startBattle.call(this);
// Increase Stress Count
$gameParty.stressEnergyCount = 3;
// Set Default Picture Display Layer
this.setPictureDisplayLayer('top');
// Get Scene
const scene = SceneManager._scene;
const spriteset = scene._spriteset;
// Set Container
let container = spriteset._pictureContainer;
// Move Fade Layer to Scene
scene.addChild(spriteset._fadeSprite);
};
//=============================================================================
// * End Battle
//=============================================================================
BattleManager.endBattle = function(result) {
// Refresh Status
this.refreshStatus();
$gameParty.allMembers().forEach(function(actor) {
actor._hasLeveled = false;
});
// Set Hide Low HP overlay flag to true
this._hideLowHpOverlay = true;
// Fadeout Battle Music
if(!BattleManager.isBattleSameOfMapBgm()) {AudioManager.fadeOutBgm(2);}
AudioManager.fadeOutBgs(2);
// Fadeout BGS
AudioManager.fadeOutDangerBgs(1);
// Run Original Function
_TDS_.OmoriBattleSystem.BattleManager_endBattle.call(this, result);
// Stop Using victory face
$gameParty.allMembers().forEach(function(actor) {
actor._useVictoryFace = false;
});
};
//=============================================================================
// * Play Victory ME
//=============================================================================
BattleManager.playVictoryMe = function() {
// Play Victory ME
AudioManager.playMe($gameSystem.victoryMe());
// Loop Current ME
AudioManager.loopCurrentME();
};
//=============================================================================
// * Process defeat
//=============================================================================
BattleManager.processDefeat = function() {
this._logWindow.push('waitFrames', 30);
this._logWindow.push('showGlobalDefeatMessage');
// Run Original Function
_TDS_.OmoriBattleSystem.BattleManager_processDefeat.call(this);
};
//=============================================================================
// * Process Abort
//=============================================================================
BattleManager.processAbort = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.BattleManager_processAbort.call(this);
};
//=============================================================================
// * Start Turn
//=============================================================================
BattleManager.startTurn = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.BattleManager_startTurn.call(this);
// Reset Actor Command Index
this._actorCommandIndex = 0;
};
//=============================================================================
// * Display Start Messages
//=============================================================================
BattleManager.displayStartMessages = function() { };
//=============================================================================
// * Display Escape Success Message
//=============================================================================
BattleManager.displayEscapeSuccessMessage = function() {
this._logWindow.push('addText', TextManager.escapeStart.format($gameParty.name()));
this._logWindow.push('wait');
};
//=============================================================================
// * Display Escape Failure Message
//=============================================================================
BattleManager.displayEscapeFailureMessage = function() {
this._logWindow.push('addText', TextManager.escapeStart.format($gameParty.name()));
this._logWindow.push('wait');
this._logWindow.push('addText', '\\.' + TextManager.escapeFailure);
};
//=============================================================================
// * Display Victory
//=============================================================================
BattleManager.displayVictoryMessage = function() {
this._logWindow.push('addText', TextManager.victory.format($gameParty.name()));
this._logWindow.push('waitForInput')
};
//=============================================================================
// * Display Defeat Message
//=============================================================================
BattleManager.displayDefeatMessage = function() {
this._logWindow.push('addText', TextManager.defeat.format($gameParty.name()));
this._logWindow.push('wait', 60);
//this._logWindow.push('waitForInput')
};
//=============================================================================
// * Display Exp
//=============================================================================
BattleManager.displayExp = function() {
var exp = this._rewards.exp;
if (exp > 0) {
var text = TextManager.obtainExp.format(exp, TextManager.exp);
this._logWindow.push('addText', '\\.' + text);
this._logWindow.push('waitForInput')
}
};
//=============================================================================
// * Display Gold
//=============================================================================
BattleManager.displayGold = function() {
var gold = this._rewards.gold;
if (gold > 0) {
this._logWindow.push('addText', '\\.' + TextManager.obtainGold.format(gold));
this._logWindow.push('waitForInput')
}
};
//=============================================================================
// * Display Drop Items
//=============================================================================
BattleManager.displayDropItems = function() {
var items = this._rewards.items;
if (items.length > 0) {
$gameMessage.newPage();
items.forEach(function(item) {
// $gameMessage.add(TextManager.obtainItem.format(item.name));
this._logWindow.push('addText', TextManager.obtainItem.format(item.name));
}, this);
this._logWindow.push('waitForInput')
}
};
//=============================================================================
// * Gain Experience
//=============================================================================
BattleManager.gainExp = function() {
var exp = this._rewards.exp;
$gameParty.allMembers().forEach(function(actor) {
actor.gainExp(exp);
});
// Clear Game Message
$gameMessage.clear();
// Go Through Actors
$gameParty.allMembers().forEach(function(actor) {
// Go Through Data
var data = actor._levelUpData;
// If Data Exists
if (data) {
this._logWindow.push('clear');
this._logWindow.push('playSE', {name: "BA_Happy", volume: 90, pitch: 100, pan: 0});
this._logWindow.push('addText', TextManager.levelUp.format(actor._name, TextManager.level, data.level));
this._logWindow.push('waitForInput');
data.skills.forEach(function(skill) {
this._logWindow.push('addText', TextManager.obtainSkill.format(skill.name));
}, this);
if (data.skills.length > 0) {
this._logWindow.push('waitForInput')
};
};
// Delete Actor Level Up Data
delete actor._levelUpData;
}, this);
// Get Last Method
var lastMethod = this._logWindow._methods[this._logWindow._methods.length-1];
// If Last Method is not wait for input
if (lastMethod && lastMethod.name !== 'waitForInput') {
// if (this._logWindow._methods)
this._logWindow.push('waitForInput')
};
};
//=============================================================================
// * Display Start Messages
//=============================================================================
BattleManager.setBattleIntro = function(name) {
// Set Battle Intro
this._battleIntro = name;
};
//=============================================================================
// * Determine if Battle Intro is active
//=============================================================================
BattleManager.isBattleIntroActive = function() { return this._battleIntro; }
//=============================================================================
// * Make Battle Retry Data
//=============================================================================
BattleManager.makeBattleRetryData = function() {
// Delete Previous Data
if (this._battleRetryData) { delete this._battleRetryData; };
// Initialize Battle Retry Data Object
this._battleRetryData = {};
// Get Object List
let list = BattleManager._retryObjList;
// Initialize Data Object
let data = {};
// Go Through List
for (let i = 0; i < list.length; i++) {
// Get Name
let name = list[i];
// Get Data Object
let obj = window['$' + name];
data[name] = window['$' + name];
// // Make Deep copy of the object
// this._battleRetryData[name] = JsonEx.makeDeepCopy(obj);
};
// Stringify Data
this._battleRetryData = JsonEx.stringify(data);
};
//=============================================================================
// * Retry Processing
//=============================================================================
BattleManager.processRetry = function() {
// Get Data
let data = JsonEx.parse(this._battleRetryData);
// If Data Exists
if (data) {
// Go Through List of Entries in data
for (let [key, value] of Object.entries(data)) {
// Set Data
window['$' + key] = value;
};
};
// return;
BattleManager._battleRetried = true;
// Set Final Battle Phase value
$gameVariables.setValue(1220, BattleManager._finalBattlePhase);
this.setup(...BattleManager._battleRetrySetup);
SceneManager.goto(Scene_Battle);
};
//=============================================================================
// * Get Actor Input Order
//=============================================================================
BattleManager.getActorInputOrder = function() {
let members = $gameParty.members();
let order = $gameSwitches.value(7) ? [8, 10, 9, 11] : [1, 2, 3, 4];
let list = []
// Go through order
for (let i = 0; i < order.length; i++) {
let index = members.indexOf($gameActors.actor(order[i]));
if (index > -1 && members[index].isAlive() && members[index].isBattleMember()) { list.push(index); }
}
// Return List
return list;
};
//=============================================================================
// * Select Next Command
//=============================================================================
BattleManager.selectNextCommand = function() {
if (this._actorCommandIndex < 0) { this._actorCommandIndex = 0;}
// Set Index List
let indexList = this.getActorInputOrder();
// Set Actor Index
this._actorIndex = indexList[this._actorCommandIndex];
do {
if (!this.actor() || !this.actor().selectNextCommand()) {
this.changeActor(indexList[this._actorCommandIndex++], 'waiting');
if (this._actorCommandIndex > indexList.length) {
this.startTurn();
break;
};
};
} while (this.actor() && !this.actor().canInput());
};
//=============================================================================
// * Select Previous Command
//=============================================================================
BattleManager.selectPreviousCommand = function() {
// Decrease Actor Command Index
this._actorCommandIndex--
// Set Index List
let indexList = this.getActorInputOrder();
// Set Actor Index
this._actorIndex = indexList[this._actorCommandIndex];
do {
if (!this.actor() || !this.actor().selectPreviousCommand()) {
// Get Actor
let actor = this.actor();
// If Actor exists
if (actor) {
// Get Current Action
let currentAction = actor.currentAction();
// Clear Current Action if it exists
if (currentAction) { currentAction.clear(); };
};
this.changeActor(indexList[this._actorCommandIndex-1], 'undecided');
// console.log(this._actorCommandIndex, this._actorIndex)
if(!!this.actor() && !this.actor().canInput()) {this._actorCommandIndex--;}
if (this._actorCommandIndex <= 0) {
this._actorIndex = -1;
this._actorCommandIndex = 0;
return;
}
}
} while (this.actor() && !this.actor().canInput());
this.clearInputtingAction();
};
//=============================================================================
// * Set Picture Display Layer
//=============================================================================
BattleManager.setPictureDisplayLayer = function(layer = 'front') {
// Set Picture Display Layer
this._pictureDisplayLayer = layer.toLowerCase();
// Get Scene
const scene = SceneManager._scene;
const spriteset = scene._spriteset;
// Set Container
let container = spriteset._pictureContainer;
// Display Layer Switch Case
switch (this._pictureDisplayLayer) {
case 'top':
// Add Container to the battle scene
scene.addChild(this._spriteset._pictureContainer);
break;
case 'front':
// Add child to original position
spriteset.addChildAt(container, 2);
break;
case 'back':
// Add child behind enemy sprites
spriteset._battleField.addChildAt(container, 0);
break;
}
};
//=============================================================================
// * Start Fade Out
//=============================================================================
BattleManager.startFadeOut = function(duration, white) {
// Start Fade Out
SceneManager._scene.startFadeOut(duration, white);
};
//=============================================================================
// * Start Fade In
//=============================================================================
BattleManager.startFadeIn = function(duration, white) {
// Start Fade Out
SceneManager._scene.startFadeIn(duration, white);
};
BattleManager.setStressSpeed = function(speed) {
this._stressSpeed = speed;
};
BattleManager.setShowHpOverlay = function(show) {
this._showLowHpOverlay = show;
};
//=============================================================================
// ** Game_Enemy
//-----------------------------------------------------------------------------
// The game object class for an enemy.
//=============================================================================
// * Determine if Enemy can be scanned
//=============================================================================
Game_Enemy.prototype.canScan = function() {
// Get Scan Immunity
var scan = this.enemy().meta.ScanImmunity;
// Return Scan State
return scan === undefined ? true : false;
};
//=============================================================================
// ** Game_Action
//-----------------------------------------------------------------------------
// The game object class for a battle action.
//=============================================================================
// Alias Listing
//=============================================================================
_TDS_.OmoriBattleSystem.Game_Action_apply = Game_Action.prototype.apply;
_TDS_.OmoriBattleSystem.Game_Action_clear = Game_Action.prototype.clear;
_TDS_.OmoriBattleSystem.Game_Action_isForOpponent = Game_Action.prototype.isForOpponent;
_TDS_.OmoriBattleSystem.Game_Action_isForFriend = Game_Action.prototype.isForFriend;
_TDS_.OmoriBattleSystem.Game_Action_needsSelection = Game_Action.prototype.needsSelection;
_TDS_.OmoriBattleSystem.Game_Action_makeTargets = Game_Action.prototype.makeTargets;
//=============================================================================
// * Apply
//=============================================================================
Game_Action.prototype.clear = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Game_Action_clear.call(this);
// Clear Target Group (0: Party, 1: Enemies)
this._targetGroup = null;
};
//=============================================================================
// * Set Target Group
//=============================================================================
Game_Action.prototype.setTargetGroup = function(index) { this._targetGroup = index; };
//=============================================================================
// * Determine if action can change target groups
//=============================================================================
Game_Action.prototype.canChangeTargetGroups = function() {
// Get Item
let item = this.item();
// Return true if item has note tags
if (item && item.meta['Enemy or Actor Select']) { return true; };
// Return false by default
return false;
};
//=============================================================================
// * Check if the user is targettable;
//=============================================================================
Game_Action.prototype.notTargetUser = function() {
const item = this.item();
if(!!item && !!item.meta["Not User"]) {return true;}
return false;
}
//=============================================================================
// * Determine if Action is for opponent
//=============================================================================
Game_Action.prototype.isForOpponent = function() {
if (this._targetGroup === 1) { return true; };
// Return Original Function
return _TDS_.OmoriBattleSystem.Game_Action_isForOpponent.call(this);
};
//=============================================================================
// * Determine if Action is for Friend
//=============================================================================
Game_Action.prototype.isForFriend = function() {
if (this._targetGroup === 0) { return true; };
// Return Original Function
return _TDS_.OmoriBattleSystem.Game_Action_isForFriend.call(this);
};
//=============================================================================
// * Determine if Action needs Selection
//=============================================================================
Game_Action.prototype.needsSelection = function() {
// If Action is for everybody return false
if (this.isForEverybody()) { return false; };
// Return Original Function
return _TDS_.OmoriBattleSystem.Game_Action_needsSelection.call(this);
};
//=============================================================================
// * Determine if Action is for everybody
//=============================================================================
Game_Action.prototype.isForEverybody = function() {
// Get Item
let item = this.item();
// If item exist
if (item) {
if (item.meta.Target && item.meta.Target.trim().toLowerCase() === 'everybody') {
return true;
}
};
// Return false by default
return false;
};
//=============================================================================
// * Make Targets
//=============================================================================
Game_Action.prototype.makeTargets = function() {
// If action is for everyone
if (this.isForEverybody()) {
// Initialize Target Array
let targets = this.friendsUnit().aliveMembers().concat(this.opponentsUnit().aliveMembers());
// Return Targets
return this.repeatTargets(targets);
};
// Return Original Function
return _TDS_.OmoriBattleSystem.Game_Action_makeTargets.call(this);
};
//=============================================================================
// * Apply
//=============================================================================
Game_Action.prototype.apply = function(target) {
// Run Original Function
_TDS_.OmoriBattleSystem.Game_Action_apply.call(this, target);
// Get Result
let result = target.result();
// Check iff hit
let hit = result.isHit();
// If Hit
if (hit) {
// Get Element Rate
let elementRate = this.calcElementRate(target);
// Set elemental results
result.elementStrong = elementRate > 1;
result.elementWeak = elementRate < 1;
console.log(this.subject().name(), elementRate);
};
// If Target is an enemy
if (target.isEnemy()) {
// Get Item
let item = this.item();
// If result was a hit
if (hit) {
// If scanning enemy
if (item && item.meta.ScanEnemy && target.canScan()) {
// Scan Enemy
$gameParty.addScannedEnemy(target.enemyId());
};
};
} else {
// If result was a hit
if (hit) {
// If HP damage is more than 0
if (result.hpDamage > 0) {
// Increase Stress Count
$gameParty.stressEnergyCount++;
};
};
};
};
//=============================================================================
// ** Game_ActionResult
//-----------------------------------------------------------------------------
// The game object class for a result of a battle action. For convinience, all
// member variables in this class are public.
//=============================================================================
// Alias Listing
//=============================================================================
_TDS_.OmoriBattleSystem.Game_ActionResult_clear = Game_ActionResult.prototype.clear;
//=============================================================================
// * Clear
//=============================================================================
Game_ActionResult.prototype.clear = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Game_ActionResult_clear.call(this);
// Set Elemental Strong & Weak flags
this.elementStrong = false;
this.elementWeak = false;
};
//=============================================================================
// ** Scene_Battle
//-----------------------------------------------------------------------------
// The scene class of the battle screen.
//=============================================================================
// Alias Listing
//=============================================================================
_TDS_.OmoriBattleSystem.Scene_Battle_initialize = Scene_Battle.prototype.initialize;
_TDS_.OmoriBattleSystem.Scene_Battle_create = Scene_Battle.prototype.create;
_TDS_.OmoriBattleSystem.Scene_Battle_start = Scene_Battle.prototype.start;
_TDS_.OmoriBattleSystem.Scene_Battle_update = Scene_Battle.prototype.update
_TDS_.OmoriBattleSystem.Scene_Battle_createDisplayObjects = Scene_Battle.prototype.createDisplayObjects;
_TDS_.OmoriBattleSystem.Scene_Battle_createAllWindows = Scene_Battle.prototype.createAllWindows;
_TDS_.OmoriBattleSystem.Scene_Battle_createActorCommandWindow = Scene_Battle.prototype.createActorCommandWindow
_TDS_.OmoriBattleSystem.Scene_Battle_createStatusWindow = Scene_Battle.prototype.createStatusWindow;
_TDS_.OmoriBattleSystem.Scene_Battle_createActorWindow = Scene_Battle.prototype.createActorWindow;
_TDS_.OmoriBattleSystem.Scene_Battle_createEnemyWindow = Scene_Battle.prototype.createEnemyWindow;
_TDS_.OmoriBattleSystem.Scene_Battle_commandFight = Scene_Battle.prototype.commandFight;
_TDS_.OmoriBattleSystem.Scene_Battle_commandEscape = Scene_Battle.prototype.commandEscape;
_TDS_.OmoriBattleSystem.Scene_Battle_selectActorSelection = Scene_Battle.prototype.selectActorSelection;
_TDS_.OmoriBattleSystem.Scene_Battle_onActorOk = Scene_Battle.prototype.onActorOk;
_TDS_.OmoriBattleSystem.Scene_Battle_onActorCancel = Scene_Battle.prototype.onActorCancel;
_TDS_.OmoriBattleSystem.Scene_Battle_selectEnemySelection = Scene_Battle.prototype.selectEnemySelection;
_TDS_.OmoriBattleSystem.Scene_Battle_onEnemyOk = Scene_Battle.prototype.onEnemyOk;
_TDS_.OmoriBattleSystem.Scene_Battle_onEnemyCancel = Scene_Battle.prototype.onEnemyCancel;
_TDS_.OmoriBattleSystem.Scene_Battle_startPartyCommandSelection = Scene_Battle.prototype.startPartyCommandSelection;
_TDS_.OmoriBattleSystem.Scene_Battle_startActorCommandSelection = Scene_Battle.prototype.startActorCommandSelection;
_TDS_.OmoriBattleSystem.Scene_Battle_commandItem = Scene_Battle.prototype.commandItem;
_TDS_.OmoriBattleSystem.Scene_Battle_onItemCancel = Scene_Battle.prototype.onItemCancel;
_TDS_.OmoriBattleSystem.Scene_Battle_onItemOk = Scene_Battle.prototype.onItemOk;
_TDS_.OmoriBattleSystem.Scene_Battle_commandSkill = Scene_Battle.prototype.commandSkill;
_TDS_.OmoriBattleSystem.Scene_Battle_onSkillOk = Scene_Battle.prototype.onSkillOk;
_TDS_.OmoriBattleSystem.Scene_Battle_onSkillCancel = Scene_Battle.prototype.onSkillCancel;
_TDS_.OmoriBattleSystem.Scene_Battle_selectNextCommand = Scene_Battle.prototype.selectNextCommand;
_TDS_.OmoriBattleSystem.Scene_Battle_endCommandSelection = Scene_Battle.prototype.endCommandSelection;
//=============================================================================
// * Object Initialization
//=============================================================================
Scene_Battle.prototype.initialize = function() {
// Set Image reservation Id
this._imageReservationId = 'battle';
// Create Movement Object
this.move = new Object_Movement();
// Create Main Tone Filter
this.createMainToneFilter();
// Run Original Function
_TDS_.OmoriBattleSystem.Scene_Battle_initialize.call(this);
};
//=============================================================================
// * Start Battle
//=============================================================================
Scene_Battle.prototype.start = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Scene_Battle_start.call(this);
// Start Fade in
// Fix for Party Command Window
//this.startFadeIn(this.fadeSpeed(), $gameSwitches.value(369));
};
//=============================================================================
// * Create Fade Sprite
//=============================================================================
Scene_Battle.prototype.createFadeSprite = function(white) {
// Run Original Function
Scene_Base.prototype.createFadeSprite.call(this);
// If fade sprite exists move it to the top
if (this._fadeSprite) { this.addChild(this._fadeSprite); };
};
//=============================================================================
// * Create
//=============================================================================
Scene_Battle.prototype.create = function() {
if (BattleManager._battleRetried) {
BattleManager._waitingForRetryVideo = BattleManager._isFinalBattle;
this._retryFadeInAnim = 20;
this._currentRetryFadeInAnim = this._retryFadeInAnim;
$gameScreen.startFadeOut(1);
_TDS_.OmoriBattleSystem.Scene_Battle_create.call(this);
this._stressBar.opacity = 0;
// this._partyCommandWindow._commandSprites.forEach(function(sprite) {
// sprite.opacity = 0;
// });
this._helpWindow.opacity = 255;
this._logWindow.opacity = 255;
this._logWindow.visible = true;
this._partyCommandWindow.opacity = 0;
this._actorWindow.opacity = 255;
this._faceWindowsContainer.opacity = 255;
this._scrollTextWindow.opacity = 255;
// this._partyCommandWindow._customCursorRectSpriteContainer.opacity = 0;
} else {
_TDS_.OmoriBattleSystem.Scene_Battle_create.call(this);
}
};
//=============================================================================
// * Initialize Atlas Lists
//=============================================================================
Scene_Battle.prototype.initAtlastLists = function() {
// Run Original Function
Scene_Base.prototype.initAtlastLists.call(this);
// Add Required Atlas
this.addRequiredAtlas('battleATLAS');
};
//=============================================================================
// * Load Reserved Bitmaps
//=============================================================================
Scene_Battle.prototype.loadReservedBitmaps = function() {
// Run Original Function
Scene_Base.prototype.loadReservedBitmaps.call(this);
// Load Input Icons
ImageManager.loadInputIcons();
// Reserve System Images
ImageManager.reserveSystem('enemy_box', 0, this._imageReservationId);
ImageManager.reserveSystem('enemy_box_gradients', 0, this._imageReservationId);
ImageManager.reserveSystem('hp_icon', 0, this._imageReservationId);
};
//=============================================================================
// * Frame Update
//=============================================================================
Scene_Battle.prototype.update = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Scene_Battle_update.call(this);
if (this._currentRetryFadeInAnim >= 0) {
if (!BattleManager._waitingForRetryVideo) {
$gameScreen.startFadeIn(this._retryFadeInAnim);
var opacityPerUpdate = 255 / this._retryFadeInAnim;
this._currentRetryFadeInAnim--;
this._stressBar.opacity += opacityPerUpdate;
this._partyCommandWindow._commandSprites.forEach(function(sprite) {
sprite.opacity += opacityPerUpdate;
});
this._helpWindow.opacity += opacityPerUpdate;
this._logWindow.opacity += opacityPerUpdate;
this._logWindow.visible = true;
//this._partyCommandWindow.opacity += opacityPerUpdate;
this._actorWindow.opacity += opacityPerUpdate;
this._faceWindowsContainer.opacity += opacityPerUpdate;
this._scrollTextWindow.opacity += opacityPerUpdate;
this._partyCommandWindow._customCursorRectSpriteContainer.opacity += opacityPerUpdate;
BattleManager._battleRetried = false;
}
}
// Update Movement Object
this.move.update();
// Update Main Tone Filter
this.updateMainToneFilter();
};
//=============================================================================
// * Create Main Tone Filter
//=============================================================================
Scene_Battle.prototype.createMainToneFilter = function() {
// Using Tone Filter Flag
this._usingToneFilter = false;
// Main Status Tone
this._mainStatusTone = [0, 0, 0, 0];
// Create Main Status Filter
this._mainStatusToneFilter = new ToneFilter();
// Adjust Tone Filter
this._mainStatusToneFilter.adjustTone(this._mainStatusTone[0], this._mainStatusTone[1], this._mainStatusTone[2]);
this._mainStatusToneFilter.adjustSaturation(-this._mainStatusTone[3]);
// this._stressBar.filters = [this._mainStatusToneFilter]
// this._logWindow.filters = [this._mainStatusToneFilter]
// this._statusWindow.filters = [this._mainStatusToneFilter]
// this._faceWindowsContainer.filters = [this._mainStatusToneFilter]
// this._logWindow._scrollTextSprite.filters = [this._mainStatusToneFilter]
// this._helpWindow.filters = [this._mainStatusToneFilter]
// this._mainStatusContainer.filters = [this._mainStatusToneFilter];
// this._mainStatusToneFilter.filterArea = new Rectangle(-margin, -margin, width, height);
// this._mainStatusContainer.setBlendColor([255, 255, 0, 255])
// var mainStatusList = [this._logWindow, this._stressBar];
// for (var i = 0; i < mainStatusList.length; i++) {
// var obj = mainStatusList[i];
// obj.filters = [this._mainStatusToneFilter]
// }
// this._statusWindow.visible = false;
// this._partyCommandWindow.visible = false;
// this._actorCommandWindow.visible = false
};
//=============================================================================
// * Update Main Tone Filter
//=============================================================================
Scene_Battle.prototype.updateMainToneFilter = function() {
// Get Message Busy Flag
var messageBusy = $gameMessage.isBusy();
var isFilterNotNeededBattle = [891,444,451,134,135,136].contains($gameTroop._troopId);
// If Not using tone filter and message is busy
if (!this._usingToneFilter && messageBusy && !isFilterNotNeededBattle) {
// Set Using Tone filter flag
this._usingToneFilter = true;
// Get Main Status Objects
var objects = [this._stressBar, this._faceWindowsContainer, this._logWindow._scrollTextSprite, this._helpWindow]
// Set Main Status Objects Filters
for (var i = 0; i < objects.length; i++) { objects[i].filters = [this._mainStatusToneFilter]; };
};
// If Using Tone filter
if (this._usingToneFilter) {
// Get Rate
var rate = this._messageWindow.openness / 255;
var tone = -100 * rate;
// Set Main Status Tone
this._mainStatusTone[0] = tone;
this._mainStatusTone[1] = tone;
this._mainStatusTone[2] = tone;
// Set Main Status Tone Filter Tone
this._mainStatusToneFilter.reset();
this._mainStatusToneFilter.adjustTone(this._mainStatusTone[0], this._mainStatusTone[1], this._mainStatusTone[2]);
this._mainStatusToneFilter.adjustSaturation(-this._mainStatusTone[3]);
// If rate is 0 and message is not busy
if (rate === 0 && !messageBusy) {
// Set Using filter flag to false
this._usingToneFilter = false;
// Get Main Status Objects
var objects = [this._stressBar, this._faceWindowsContainer, this._logWindow._scrollTextSprite, this._helpWindow]
// Clear Main Status Objects Filters
for (var i = 0; i < objects.length; i++) { objects[i].filters = [this._spriteset.getToneFilter()] };
};
};
};
//=============================================================================
// * Create All Windows
//=============================================================================
Scene_Battle.prototype.createAllWindows = function() {
// Run Orignal Function
_TDS_.OmoriBattleSystem.Scene_Battle_createAllWindows.call(this);
this._partyCommandWindow.x = 140
this._partyCommandWindow.y = Graphics.height //- 124;
this._actorCommandWindow.x = 140;
this._actorCommandWindow.y = Graphics.height //- 124;
// Create Stress Bar
this.createStressBar();
// MAKE A NEW SPRITE CLASS THAT HANDLES THE BORDER EFFECT
// AND TRACKS THINGS ASYNCRONOUSLY.
var bitmap = new Bitmap(Graphics.width, Graphics.height);
// bitmap.fillAll('rgba(255, 0, 0, 0.8)');
// Create Low HP Overlay Sprite
this._lowHpOverlay = new Sprite_BattleLowHpOverlay();
this.addChild(this._lowHpOverlay)
// this._windowTest = new Window_Base(0, 0, 400, 400);
// this.addChild(this._windowTest)
// this._battlerIntroBackground = new Sprite(new Bitmap(Graphics.width, Graphics.height));
// this._battlerIntroBackground.bitmap.fillAll('rgba(255, 255, 255, 1)')
// this.addChildAt(this._battlerIntroBackground, 1);
// this._battlerIntroContainer = new Sprite(ImageManager.loadAtlas('battle_omori_intro'))
// this._battlerIntroContainer.x = (Graphics.width / 2) - 100;
// this._battlerIntroContainer.y = (Graphics.height / 2) + 22;
// this._battlerIntroContainer.setFrame(0, 0, 375, 435)
// this._battlerIntroContainer.anchor.set(0.5, 0.5)
// this.addChildAt(this._battlerIntroContainer, 2);
};
//=============================================================================
// * Update Status Window
//=============================================================================
Scene_Battle.prototype.updateStatusWindow = function() { };
//=============================================================================
// * Update Window Position
//=============================================================================
Scene_Battle.prototype.updateWindowPositions = function() { };
//=============================================================================
// * Create Display Objects
//=============================================================================
Scene_Battle.prototype.createDisplayObjects = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Scene_Battle_createDisplayObjects.call(this);
// Create Battle Intro container
this.createBattleIntroContainer();
};
//=============================================================================
// * Create Battle Intro Container
//=============================================================================
Scene_Battle.prototype.createBattleIntroContainer = function() {
// Create Battle Intro container Sprite
this._battleIntroContainer = new Sprite_BattleIntroContainer(BattleManager._battleIntro);
this.addChild(this._battleIntroContainer);
};
//=============================================================================
// * Create Actor Command Window
//=============================================================================
Scene_Battle.prototype.createActorCommandWindow = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Scene_Battle_createActorCommandWindow.call(this);
this._actorCommandWindow.setHandler('guard', this.commandItem.bind(this, 'snacks'));
this._actorCommandWindow.setHandler('item', this.commandItem.bind(this, 'toys'));
};
//=============================================================================
// * Create Status Window
//=============================================================================
Scene_Battle.prototype.createStatusWindow = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Scene_Battle_createStatusWindow.call(this);
// Create Face Windows
this.createFaceWindows();
};
//=============================================================================
// * Create Actor Window
//=============================================================================
Scene_Battle.prototype.createActorWindow = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Scene_Battle_createActorWindow.call(this);
// Set Face Windows
this._actorWindow._faceWindows = this._faceWindows;
this._actorWindow.visible = false;
// Set Group Target Swap
this._actorWindow._groupTargetSwap = this.groupTargetSwap.bind(this, 0);
};
//=============================================================================
// * Create Actor Window
//=============================================================================
Scene_Battle.prototype.createEnemyWindow = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Scene_Battle_createEnemyWindow.call(this);
// Set Group Target Swap
this._enemyWindow._groupTargetSwap = this.groupTargetSwap.bind(this, 1);
this._enemyWindow.y = Graphics.height;
};
//=============================================================================
// * Create Actor Window
//=============================================================================
Scene_Battle.prototype.groupTargetSwap = function(type) {
// Get Action
let action = BattleManager.inputtingAction();
// Clear Input
Input.update();
// If Action Exists
if (action && action.canChangeTargetGroups()) {
if (type === 0) {
action.setTargetGroup(1);
this._actorWindow.deselect();
this._actorWindow.deactivate();
this.hidePartyCommand();
this.hideItemWindow();
this.hideSkillWindow();
this._statusWindow.select(BattleManager.actor().battleStatusIndex());
this.selectEnemySelection()
} else {
action.setTargetGroup(0);
this._enemyWindow.deselect();
this._enemyWindow.deactivate();
// this._actorWindow.deselect();
this._actorWindow.activate();
this.selectActorSelection();
};
};
}
//=============================================================================
// * Create Help Window
//=============================================================================
Scene_Battle.prototype.createHelpWindow = function() {
// Create Help Window
this._helpWindow = new Window_OmoMenuHelp(360, 93);
this._helpWindow.x = 140;
this._helpWindow.y = -4
this._helpWindow._iconRate = 0.75;
this.addChild(this._helpWindow);
};
//=============================================================================
// * Create Skill Window
//=============================================================================
Scene_Battle.prototype.createSkillWindow = function() {
var wy = this._helpWindow.y + this._helpWindow.height;
var wh = this._statusWindow.y - wy;
this._skillWindow = new Window_BattleSkill(140, Graphics.height + 30, 360, 100);
this._skillWindow.setHelpWindow(this._helpWindow);
this._skillWindow.setHandler('ok', this.onSkillOk.bind(this));
this._skillWindow.setHandler('cancel', this.onSkillCancel.bind(this));
this.addWindow(this._skillWindow);
};
//=============================================================================
// * Create Item Window
//=============================================================================
Scene_Battle.prototype.createItemWindow = function() {
this._itemWindow = new Window_BattleItem(140, Graphics.height + 30, 360, 100);
this._itemWindow.setHelpWindow(this._helpWindow);
this._itemWindow.setHandler('ok', this.onItemOk.bind(this));
this._itemWindow.setHandler('cancel', this.onItemCancel.bind(this));
this.addWindow(this._itemWindow);
};
//=============================================================================
// * Command Fight
//=============================================================================
Scene_Battle.prototype.commandFight = function() {
if ($gameVariables.value(22) === 5) {
BattleManager.selectNextCommand();
let skill = $dataSkills[1];
BattleManager.inputtingAction().setSkill(skill.id);
BattleManager.actor().setLastBattleSkill(skill);
this.selectNextCommand();
return;
};
// Run Original Function
_TDS_.OmoriBattleSystem.Scene_Battle_commandFight.call(this);
};
//=============================================================================
// * Command Escape
//=============================================================================
Scene_Battle.prototype.commandEscape = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Scene_Battle_commandEscape.call(this);
// Hide Party Command
this.hidePartyCommand();
};
//=============================================================================
// * Select Actor Selection
//=============================================================================
Scene_Battle.prototype.selectActorSelection = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Scene_Battle_selectActorSelection.call(this);
// Select Selected Status Window Index
this._actorWindow.select(this._statusWindow.index());
};
//=============================================================================
// * On Actor Ok
//=============================================================================
Scene_Battle.prototype.onActorOk = function() {
// Get Action
let action = BattleManager.inputtingAction();
// Get Target
let target = $gameParty.memberAtStatusIndex(this._actorWindow.index());
// Get Actor Index
let actorIndex = target.index();
// If Action is for dead friend and target is not dead
if (action.isForDeadFriend() && !target.isDead()) {
SoundManager.playBuzzer();
this._actorWindow.activate()
return
};
if(action.notTargetUser() && BattleManager.actor().name() === target.name()) {
SoundManager.playBuzzer();
this._actorWindow.activate();
return;
}
// Run Original Function
_TDS_.OmoriBattleSystem.Scene_Battle_onActorOk.call(this);
// Set Target
action.setTarget(actorIndex);
this.hideItemWindow();
this.hideSkillWindow();
this._skillWindow.visible = true;
this._itemWindow.visible = true;
this._helpWindow.hide();
if(!BattleManager.actor()) {this._logWindow.clear();}
};
//=============================================================================
// * On Actor Cancel
//=============================================================================
Scene_Battle.prototype.onActorCancel = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Scene_Battle_onActorCancel.call(this);
// Select Actor at battle status index
this._statusWindow.select(BattleManager.actor().battleStatusIndex());
// Current Symbol Switch Case
switch (this._actorCommandWindow.currentSymbol()) {
case 'attack':
this.showPartyCommand();
break;
case 'skill':
this.showPartyCommand();
this.showSkillWindow();
break;
case 'item':
this.showPartyCommand();
this.showItemWindow();
break;
case 'guard':
this._itemWindow.show();
this._itemWindow.activate();
this._itemWindow.callUpdateHelp();
// this._itemWindow.select(1)
this._helpWindow.show();
// this._helpWindow.contents.fillAll('rgba(255, 0, 0, 0.5)')
break;
};
};
//=============================================================================
// * Select Enemy Selection
//=============================================================================
Scene_Battle.prototype.selectEnemySelection = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Scene_Battle_selectEnemySelection.call(this);
this.hidePartyCommand();
this.hideSkillWindow();
this.hideItemWindow();
};
//=============================================================================
// * On Enemy Ok
//=============================================================================
Scene_Battle.prototype.onEnemyOk = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Scene_Battle_onEnemyOk.call(this);
this.hideItemWindow();
this.hideSkillWindow();
this._skillWindow.visible = true;
this._itemWindow.visible = true;
this._helpWindow.hide();
// Clear Troop Select
$gameTroop.select(null);
if(!BattleManager.actor()) {this._logWindow.clear();}
// // Get Members
// let members = $gameTroop.members();
// for (let i = 0; i < members.length; i++) { members[i].deselect(); };
};
//=============================================================================
// * On Enemy Cancel
//=============================================================================
Scene_Battle.prototype.onEnemyCancel = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Scene_Battle_onEnemyCancel.call(this);
switch (this._actorCommandWindow.currentSymbol()) {
case 'attack':
case 'actionSkill':
this.showPartyCommand();
break;
case 'skill':
this.showPartyCommand();
this.showSkillWindow();
break;
case 'item':
this.showPartyCommand();
this.showItemWindow();
break;
}
};
//=============================================================================
// * Create Face Windows
//=============================================================================
Scene_Battle.prototype.createFaceWindows = function() {
// Create Face Windows Container
this._faceWindowsContainer = new Sprite();
this.addChild(this._faceWindowsContainer);
// Initialize
this._faceWindowsContainer._displayLayersContainer = new Sprite();
this._faceWindowsContainer.addChild(this._faceWindowsContainer._displayLayersContainer);
// Get Layers container
var layers = this._faceWindowsContainer._displayLayersContainer
// Create Layer List
var layerList = ['behind', 'statusBack', 'face', 'polaroid', 'front']
// Create Layers
for (var i = 0; i < layerList.length; i++) {
var name = '_' + layerList[i];
var layer = new Sprite();
layers[name] = layer;
layers.addChild(layer)
}
// Initialize Face Windows Array
this._faceWindows = [];
// Position Indexes
var indexes = [2, 3, 0, 1]
// Create Face Windows
for (var i = 0; i < 4; i++) {
// Get Index
var index = i;
var x = 14 + ((index % 2) * ((Graphics.width - 28) - 114));
var y = 5 + (Math.floor(index / 2) * ((Graphics.height - 16) - 164));
// Create Face Window
var faceWindow = new Window_OmoriBattleActorStatus(i, layers, x, y);
faceWindow.x = !faceWindow.actor() ? i % 2 ? Graphics.width : -faceWindow.windowWidth() : x;
faceWindow.y = y;
this._faceWindows[i] = faceWindow;
this._faceWindowsContainer.addChild(faceWindow)
};
// Create Animation Sprite for Layers
for (var i = 0; i < layerList.length; i++) {
// Get Layer
layer = layers['_' + layerList[i]]
// Create Face Animation Sprite
var sprite = new Sprite_BattleFaceAnimation();
sprite._effectTarget = sprite;
layers['_animation' + i] = sprite;
layer.addChild(sprite);
};
// Set status Windows Face Windows
this._statusWindow._faceWindows = this._faceWindows;
};
//=============================================================================
// * Create Face Windows
//=============================================================================
Scene_Battle.prototype.createStressBar = function() {
// Create Stress Bar
this._stressBar = new Sprite_StressBar();
this._stressBar.x = 140;
this._stressBar.y = Graphics.height - 56;
this._stressBar.visible = !$gameSwitches.value(41);
if ([2, 5, 6].contains($gameVariables.value(22))) {
this._stressBar.visible = false;
}
this.addChildAt(this._stressBar,2);
};
//=============================================================================
// * Start Party Command Selection
//=============================================================================
Scene_Battle.prototype.startPartyCommandSelection = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Scene_Battle_startPartyCommandSelection.call(this);
this._actorCommandWindow.open()
this._actorCommandWindow.hide();
this._partyCommandWindow.show();
this._helpWindow.hide();
this.showPartyCommand();
this.pushPartyMessage();
// // Add Starting Message
// if ($gameParty.size() === 1) {
// this.addLogCommandMessage("What will OMORI do?");
// } else {
// this.addLogCommandMessage("What will OMORI and friends do?");
// };
};
//=============================================================================
// * Push Party Message
//=============================================================================
Scene_Battle.prototype.pushPartyMessage = function() {
// Get Party Size
let size = $gameParty.size();
// Get Message Source
let source = LanguageManager.languageData().text.XX_GENERAL;
// Error Message
let message = 'ERRROR!';
/*switch ($gameVariables.value(22)) {
case 1:
if (size === 1) {
message = source.message_107.text;
} else {
message = source.message_100.text;
};
break;
case 2:
if (size === 1) {
message = source.message_101.text;
} else if (size === 2) {
message = source.message_102.text;
} else {
message = source.message_103.text;
};
break;
case 3:
case 4:
case 5:
case 6: message = source.message_101.text ;break;
};*/
switch(size) {
case 1:
message = source.message_104.text.format($gameParty.leader().name());
break;
case 2:
message = source.message_102.text.format($gameParty.leader().name(), $gameParty.members()[1].name());
break;
default:
message = source.message_100.text.format($gameParty.leader().name());
break;
}
// Add Log Command Message
this.addLogCommandMessage(message);
}
//=============================================================================
// * Start Actor Command Selection
//=============================================================================
Scene_Battle.prototype.startActorCommandSelection = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Scene_Battle_startActorCommandSelection.call(this);
// Open Party command Window
this._partyCommandWindow.open();
this._partyCommandWindow.hide();
this._actorCommandWindow.openness = 255;
this._actorCommandWindow.show();
this._helpWindow.hide();
// Select Actor at battle status index
this._statusWindow.select(BattleManager.actor().battleStatusIndex());
// Add Actor Action Prompt Log Text
this.addActorActionPromptLogText();
// Show Party Commands
this.showPartyCommand();
};
//=============================================================================
// * Add Log Command Message
//=============================================================================
Scene_Battle.prototype.addActorActionPromptLogText = function() {
// Get Actor
var actor = BattleManager.actor();
// If Actor Exists
if (actor) {
this.addLogCommandMessage(LanguageManager.languageData().text.XX_GENERAL.message_104.text.format(actor.name()));
};
};
//=============================================================================
// * Add Log Command Message
//=============================================================================
Scene_Battle.prototype.addLogCommandMessage = function(text, clear = true, instant = true) {
// Clear Log Window
if (clear) { this._logWindow.clear(); }
// If Instant
if (instant) {
// Add Text
this._logWindow.addInstantText(text);
} else {
// Add Text
this._logWindow.addText(text);
};
};
//=============================================================================
// * Command Item
//=============================================================================
Scene_Battle.prototype.commandItem = function(category = 'consumables') {
// Set Item Window Category
this._itemWindow.setCategory(category);
// Show Item Window
this.showItemWindow();
// Run Original Function
_TDS_.OmoriBattleSystem.Scene_Battle_commandItem.call(this);
};
//=============================================================================
// * On Item Cancel
//=============================================================================
Scene_Battle.prototype.onItemCancel = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Scene_Battle_onItemCancel.call(this);
this._itemWindow.show();
// Hide Item Window
this.hideItemWindow();
this._helpWindow.hide();
// Add Actor Action Prompt Log Text
this.addActorActionPromptLogText();
};
//=============================================================================
// * On Item Ok
//=============================================================================
Scene_Battle.prototype.onItemOk = function() {
// Get Action
var action = BattleManager.inputtingAction();
// Run Original Function
_TDS_.OmoriBattleSystem.Scene_Battle_onItemOk.call(this);
// Show Item Window
this._itemWindow.show();
this._helpWindow.hide();
// If Action does not need selection
if (!action.needsSelection()) {
this.hideItemWindow();
this.hideSkillWindow();
} else {
// Add Actor Action Prompt Log Text
this.addLogCommandMessage(LanguageManager.languageData().text.XX_GENERAL.message_105.text);
// If action can change target groups
if (action.canChangeTargetGroups()) {
// Add Actor Action Prompt Log Text
this.addLogCommandMessage(LanguageManager.languageData().text.XX_GENERAL.message_106.text, false);
};
};
};
//=============================================================================
// * Command Skill
//=============================================================================
Scene_Battle.prototype.commandSkill = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Scene_Battle_commandSkill.call(this);
this._skillWindow.show();
this.showSkillWindow();
};
//=============================================================================
// * On Skill Ok
//=============================================================================
Scene_Battle.prototype.onSkillOk = function() {
// Get Action
var action = BattleManager.inputtingAction();
// Run Original Function
_TDS_.OmoriBattleSystem.Scene_Battle_onSkillOk.call(this);
this._skillWindow.show();
this._helpWindow.hide();
// If Action does not need selection
if (!action.needsSelection()) {
this.hideItemWindow();
this.hideSkillWindow();
} else {
// Add Actor Action Prompt Log Text
this.addLogCommandMessage(LanguageManager.languageData().text.XX_GENERAL.message_105.text);
// If action can change target groups
if (action.canChangeTargetGroups()) {
// Add Actor Action Prompt Log Text
this.addLogCommandMessage(LanguageManager.languageData().text.XX_GENERAL.message_106.text, false);
}
};
};
//=============================================================================
// * On Skill Cancel
//=============================================================================
Scene_Battle.prototype.onSkillCancel = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Scene_Battle_onSkillCancel.call(this)
// Add Actor Action Prompt Log Text
this.addActorActionPromptLogText();
this._skillWindow.show();
this._helpWindow.hide();
this.hideSkillWindow();
};
//=============================================================================
// * Select Next Command
//=============================================================================
Scene_Battle.prototype.selectNextCommand = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Scene_Battle_selectNextCommand.call(this);
// If Not Inputting and there's no actor
if (!BattleManager.isInputting() && !BattleManager.actor()) {
this.hidePartyCommand();
};
};
//=============================================================================
// * End Command Selection
//=============================================================================
Scene_Battle.prototype.endCommandSelection = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Scene_Battle_endCommandSelection.call(this);
this._partyCommandWindow.open();
this._actorCommandWindow.open();
};
//=============================================================================
// * Hide All menu Elements
//=============================================================================
Scene_Battle.prototype.hideAllMenuElements = function(duration = 15) {
// Get Object
var obj = this._stressBar;
// Create Movement Data
var data = {
obj: obj, properties: ['y'], from: {y: obj.y}, to: {y: Graphics.height}, durations: {y: duration},
easing: Object_Movement.easeInCirc
};
this.move.startMove(data);
// Get Object
obj = this._partyCommandWindow;
// Create Movement Data
data = {
obj: obj, properties: ['y'], from: {y: obj.y}, to: {y: Graphics.height + 100}, durations: {y: duration},
easing: Object_Movement.easeInCirc
};
this.move.startMove(data);
// Get Object
obj = this._actorCommandWindow;
// Create Movement Data
data = {
obj: obj, properties: ['y'], from: {y: obj.y}, to: {y: Graphics.height + 100}, durations: {y: duration},
easing: Object_Movement.easeInCirc
};
this.move.startMove(data);
// Get Object
obj = this._logWindow;
// Create Movement Data
data = {
obj: obj, properties: ['y'], from: {y: obj.y}, to: {y: -100}, durations: {y: duration},
easing: Object_Movement.easeInCirc
};
this.move.startMove(data);
// Get Object
obj = this._helpWindow;
// Create Movement Data
data = {
obj: obj, properties: ['y'], from: {y: obj.y}, to: {y: -100}, durations: {y: duration},
easing: Object_Movement.easeInCirc
};
this.move.startMove(data);
for (var i = 0; i < this._faceWindows.length; i++) {
// Get Object
var obj = this._faceWindows[i];
// Create Movement Data
data = {
obj: obj, properties: ['x'], from: {x: obj.x}, to: {x: i % 2 ? Graphics.width : -obj.windowWidth() }, durations: {x: duration},
easing: Object_Movement.easeInCirc
};
this.move.startMove(data);
};
};
//=============================================================================
// * Show All menu Elements
//=============================================================================
Scene_Battle.prototype.showAllMenuElements = function() {
// Duration
var duration = 15;
// Get Object
var obj = this._stressBar;
// Create Movement Data
var data = {
obj: obj, properties: ['y'], from: {y: obj.y}, to: {y: Graphics.height - 56}, durations: {y: duration},
easing: Object_Movement.easeOutCirc
};
this.move.startMove(data);
// Get Object
obj = this._logWindow;
// Create Movement Data
data = {
obj: obj, properties: ['y'], from: {y: obj.y}, to: {y: -4}, durations: {y: duration},
easing: Object_Movement.easeOutCirc
};
this.move.startMove(data);
// Get Object
obj = this._helpWindow;
// Create Movement Data
data = {
obj: obj, properties: ['y'], from: {y: obj.y}, to: {y: -4}, durations: {y: duration},
easing: Object_Movement.easeOutCirc
};
this.move.startMove(data);
for (var i = 0; i < this._faceWindows.length; i++) {
// Get Object
var obj = this._faceWindows[i];
// If there's no actor continue to next window
if (!obj.actor()) { continue; }
// Create Movement Data
data = {
obj: obj, properties: ['x'], from: {x: obj.x}, to: {x: obj._homePosition.x }, durations: {x: duration},
easing: Object_Movement.easeOutCirc
};
this.move.startMove(data);
};
};
//=============================================================================
// * Show Party Command
//=============================================================================
Scene_Battle.prototype.showPartyCommand = function() {
// Duration
var duration = 15
// Get Object
var obj = this._stressBar;
// Create Movement Data
var data = {
obj: obj, properties: ['y'], from: {y: obj.y}, to: {y: Graphics.height - 140}, durations: {y: duration},
easing: Object_Movement.easeOutCirc
};
this.move.startMove(data);
// Get Object
obj = this._partyCommandWindow;
// Create Movement Data
data = {
obj: obj, properties: ['y'], from: {y: obj.y}, to: {y: Graphics.height - 92}, durations: {y: duration},
easing: Object_Movement.easeOutCirc
};
this.move.startMove(data);
// Get Object
obj = this._actorCommandWindow;
// Create Movement Data
data = {
obj: obj, properties: ['y'], from: {y: obj.y}, to: {y: Graphics.height - 92}, durations: {y: duration},
easing: Object_Movement.easeOutCirc
};
this.move.startMove(data);
};
//=============================================================================
// * Hide Party Command
//=============================================================================
Scene_Battle.prototype.hidePartyCommand = function() {
// Duration
var duration = 15
// Get Object
var obj = this._stressBar;
// Create Movement Data
var data = {
obj: obj, properties: ['y'], from: {y: obj.y}, to: {y: Graphics.height - 56}, durations: {y: duration},
easing: Object_Movement.easeInCirc
};
this.move.startMove(data);
// Get Object
obj = this._partyCommandWindow;
// Create Movement Data
data = {
obj: obj, properties: ['y'], from: {y: obj.y}, to: {y: Graphics.height}, durations: {y: duration},
easing: Object_Movement.easeInCirc
};
this.move.startMove(data);
// Get Object
obj = this._actorCommandWindow;
// Create Movement Data
data = {
obj: obj, properties: ['y'], from: {y: obj.y}, to: {y: Graphics.height}, durations: {y: duration},
easing: Object_Movement.easeInCirc
};
this.move.startMove(data);
};
//=============================================================================
// * Show Item Window
//=============================================================================
Scene_Battle.prototype.showItemWindow = function() {
// Duration
var duration = 15
// Get Object
var obj = this._itemWindow;
// Create Movement Data
var data = {
obj: obj, properties: ['y'], from: {y: obj.y}, to: {y: Graphics.height - 65}, durations: {y: duration},
easing: Object_Movement.easeOutCirc
};
this.move.startMove(data);
};
//=============================================================================
// * Hide Item Window
//=============================================================================
Scene_Battle.prototype.hideItemWindow = function() {
// Duration
var duration = 15
// Get Object
var obj = this._itemWindow;
// Create Movement Data
var data = {
obj: obj, properties: ['y'], from: {y: obj.y}, to: {y: Graphics.height + 30}, durations: {y: duration},
easing: Object_Movement.easeInCirc
};
this.move.startMove(data);
};
//=============================================================================
// * Show Skill Window
//=============================================================================
Scene_Battle.prototype.showSkillWindow = function() {
// Duration
var duration = 15
// Get Object
var obj = this._skillWindow;
// Create Movement Data
var data = {
obj: obj, properties: ['y'], from: {y: obj.y}, to: {y: Graphics.height - 65}, durations: {y: duration},
easing: Object_Movement.easeOutCirc
};
this.move.startMove(data);
};
//=============================================================================
// * Hide Skill Window
//=============================================================================
Scene_Battle.prototype.hideSkillWindow = function() {
// Duration
var duration = 15
// Get Object
var obj = this._skillWindow;
// Create Movement Data
var data = {
obj: obj, properties: ['y'], from: {y: obj.y}, to: {y: Graphics.height + 30}, durations: {y: duration},
easing: Object_Movement.easeInCirc
};
this.move.startMove(data);
};
//=============================================================================
// ** Sprite_BattleFaceAnimation
//-----------------------------------------------------------------------------
// This sprite is used to show animations on the battle face
//=============================================================================
class Sprite_BattleFaceAnimation extends Sprite_Base {
constructor() { super(); }
//=============================================================================
// * Start Animation
//=============================================================================
startAnimation(animation, mirror, delay) {
var sprite = new Sprite_Battle_Animation();
sprite.setup(this._effectTarget, animation, mirror, delay);
// // If animation position is for screen
// if (animation.position === 3) {
// // console.log(this.parent.parent)
// // console.log(this._screenParent)
// this.parent.addChild(sprite);
// } else {
// Add Child
this.addChild(sprite);
// // };
// Add Sprite to animation sprites
this._animationSprites.push(sprite);
// Return Added Sprite
return sprite;
};
};
//=============================================================================
// ** Sprite_Battle_Animation
//-----------------------------------------------------------------------------
// This sprite is used to show animations in battle for the actors
//=============================================================================
function Sprite_Battle_Animation() { this.initialize.apply(this, arguments); }
Sprite_Battle_Animation.prototype = Object.create(Sprite_Animation.prototype);
Sprite_Battle_Animation.prototype.constructor = Sprite_Battle_Animation;
//=============================================================================
// * Object Initilization
//=============================================================================
Sprite_Battle_Animation.prototype.initMembers = function() {
Sprite_Animation.prototype.initMembers.call(this);
// Set Home Rectangle
this._homeRect = new Rectangle(100, 0, 114, 164)
};
//=============================================================================
// * Set Home Position
//=============================================================================
Sprite_Battle_Animation.prototype.setHomePosition = function(x, y) {
// Set Home Rect X & Y
this._homeRect.x = x; this._homeRect.y = y;
};
//=============================================================================
// * Object Initilization
//=============================================================================
Sprite_Battle_Animation.prototype.updatePosition = function() {
// If full screen
if (this._animation.position === 3) {
this.x = (Graphics.width / 2) + this.xOffset()
this.y = (Graphics.height / 2) + this.yOffset()
} else {
// Get Home Rectangle
var home = this._homeRect
// Set Position
this.x = home.x + (home.width / 2);
this.y = home.y + home.height ;
if (this._animation.position === 0) {
this.y -= home.height;
} else if (this._animation.position === 1) {
this.y -= home.height / 2;
};
};
};
//=============================================================================
// * Object Initilization
//=============================================================================
Sprite_Battle_Animation.prototype.xOffset = function() {
var node = this;
var x = this.x
while (node) {
x -= node.x;
node = node.parent;
}
return x;
}
//=============================================================================
// * Object Initilization
//=============================================================================
Sprite_Battle_Animation.prototype.yOffset = function() {
var node = this;
var y = this.y
while (node) {
y -= node.y;
node = node.parent;
}
return y;
}
//=============================================================================
// ** Sprite_StressBar
//-----------------------------------------------------------------------------
// This sprite is used to display the stress bar.
//=============================================================================
function Sprite_StressBar() { this.initialize.apply(this, arguments); }
Sprite_StressBar.prototype = Object.create(Sprite.prototype);
Sprite_StressBar.prototype.constructor = Sprite_StressBar;
//=============================================================================
// * Object Initilization
//=============================================================================
Sprite_StressBar.prototype.initialize = function() {
// Super Call
Sprite.prototype.initialize.call(this);
// Line X
this._lx = 0;
// EKG Row
this._ekgRow = 0;
// Set Pending EKG Row
this._pendingEKGRow = -1;
this._pendingIndex = -1;
this._frameCount = 0;
// Create Sprites
this.createBackgroundSprite();
this.createEKGLineSprites();
};
//=============================================================================
// * Create Create Background Sprite
//=============================================================================
Sprite_StressBar.prototype.createBackgroundSprite = function() {
// Create Background Sprite
this._background = new Sprite();
this.addChild(this._background);
this.updateBackgroundImage();
};
//=============================================================================
// * Create EKG Line Sprites
//=============================================================================
Sprite_StressBar.prototype.createEKGLineSprites = function() {
// Create EKG Line Sprite
this._ekgLine = new Sprite(new Bitmap(290, 28));
this._ekgLine.x = 20;
this._ekgLine.y = 8//14;
this.addChild(this._ekgLine);
// Create EKG Line Bitmap
this._ekgLineBitmap = new Bitmap(290, 28);
// Create EKG New Line Bitmap
this._ekgLineNewBitmap = new Bitmap(290, 28);
// Create EKG Text Sprite
this._ekgText = new Sprite(new Bitmap(33, 33));
this._ekgText.x = 320;
this._ekgText.y = 7; // 7
this._ekgText.bitmap.fontSize = 28;
this.addChild(this._ekgText);
// Refresh EKG Bitmap
this.refreshEKGBitmap();
};
//=============================================================================
// * Refresh EKG Bitmap
//=============================================================================
Sprite_StressBar.prototype.refreshEKGBitmap = function(index = this._ekgRow) {
let ekgName = 'energy_stress_ekg_line';
switch ($gameVariables.value(22)) {
case 1: ekgName = 'energy_dw_line' ;break;
case 3: ekgName = 'energy_stress_ekg_line' ;break;
case 4: ekgName = 'energy_stress_ekg_line' ;break;
};
// Get Bitmap
var bitmap = ImageManager.loadSystem(ekgName);
// Clear & Transfer Bitmap
this._ekgLineBitmap.clear();
this._ekgLineBitmap.blt(bitmap, 0, index * 28, bitmap.width, 28, 0, 0);
// If Pending EKG Row is valid
if (this._pendingEKGRow >= 0) {
this._ekgLineNewBitmap.clear()
this._ekgLineNewBitmap.blt(bitmap, 0, this._pendingEKGRow * 28, bitmap.width, 28, 0, 0);
};
// if ($gameParty.actorIsAffectedByState(1, 20) || $gameParty.actorIsAffectedByState(8, 20)) {
// this._pendingIndex = Math.floor();
// };
};
//=============================================================================
// * Draw Stress Count Value
//=============================================================================
Sprite_StressBar.prototype.drawStressCountValue = function(value = this._ekgRow) {
// Clear Text
this._ekgText.bitmap.clear();
// Refresh EKG Bitmap
this._ekgText.bitmap.fontSize = 18;this._ekgText.bitmap.drawText(value.clamp(0, 10).padZero(2), 0, -2, this._ekgText.bitmap.width, this._ekgText.bitmap.height, 'center');
};
//=============================================================================
// * Frame Update
//=============================================================================
Sprite_StressBar.prototype.update = function() {
// Super Call
Sprite.prototype.update.call(this);
// Determine if stressed
let stressed = $gameParty.actorIsAffectedByState(1, 20) || $gameParty.actorIsAffectedByState(8, 20);
// Get Energy
let energy = $gameParty.stressEnergyCount;
// If Stressed Set energy to 10
if (stressed) { energy = 10; }
// Increase Frame Count
this._frameCount = (this._frameCount + 1) % 60;
// If Energy does not match ekg row
if (energy !== this._ekgRow) {
// If energy is at max and troop is 415
if (energy === 10 && $gameTroop._troopId === 451) {
// Set Pending EKG row to 11
this._pendingEKGRow = 11;
} else {
// Set Pending EKG Row to match energy
this._pendingEKGRow = energy;
};
// Update Background Image
this.updateBackgroundImage();
// Draw stress Count value
if(!stressed) {this.drawStressCountValue(energy);}
};
// If frame count is 0
if (this._frameCount && this._frameCount % BattleManager._stressSpeed === 0) {
// If Stressed
if (energy >= 10 && [3,4].contains($gameVariables.value(22)) && !!stressed) {
// Draw Stress Count Value
this.drawStressCountValue(Math.randomInt(11));
}
}
// Update Line
this.updateLine(stressed)
// return;
// if (Input.isTriggered('up')) {
// $gameParty.stressEnergyCount++
// return;
// }
// if (Input.isTriggered('down')) {
// $gameParty.stressEnergyCount--;
// return;
// }
// if ($gameParty.actorIsAffectedByState(1, 20) || $gameParty.actorIsAffectedByState(8, 20)) {
// energy = 10;
// }
// // If Energy count does not match EKG
// if (energy !== this._pendingEKGRow && energy !== this._ekgRow) {
// if (energy === 10 && $gameTroop._troopId === 451) {
// this._pendingEKGRow = 11;
// } else {
// this._pendingEKGRow = energy;
// };
// this.updateBackgroundImage();
// };
// if (this._frameCount && this._frameCount % BattleManager._stressSpeed == 0) {
// if ($gameParty.actorIsAffectedByState(1, 20) || $gameParty.actorIsAffectedByState(8, 20)) {
// this.refreshEKGBitmap();
// }
// }
// if (energy !== this._pendingIndex) {
// this._ekgText.bitmap.clear();
// this._ekgText.bitmap.drawText(this._pendingIndex.clamp(0, 10).padZero(2), 0, -4, this._ekgText.bitmap.width, this._ekgText.bitmap.height, 'center');
// this._pendingIndex = energy;
// }
// this._frameCount++;
// if (this._frameCount > 60) this._frameCount = 0;
// var speed = 1
// for (var i = 0; i < speed; i++) {
// this.updateLine()
// };
};
//=============================================================================
// * Determine if Line Connects
//=============================================================================
Sprite_StressBar.prototype.canLinesConnect = function(x = this._lx, bitmap = this._ekgLineBitmap, bitmap2 = this._ekgLineNewBitmap) {
//if (x <= 0) { return true; }
//if (x >= bitmap.width) { return true; };
// Points Array
var points = [];
for (var i = 0; i < bitmap.height; i++) {
if (this.isLineAtCenter(bitmap, x, i)) { points.push(i);}
};
// Go Through Points
for (var i = 0; i < points.length; i++) {
// Get Y Point
var y = points[i];
if (this.isLineAtCenter(bitmap2, x + 1, y)) {
return true;
};
};
// Return False
return true;
};
//=============================================================================
// * Determine if Line Connects
//=============================================================================
Sprite_StressBar.prototype.isLineAtCenter = function(bitmap = this._ekgLineBitmap, x = this._lx, y = 14) {
// console.log(bitmap.getAlphaPixel(x, y))
if (bitmap.getAlphaPixel(x, y) === 0) { return false; }
// Return true by default
return true;
};
//=============================================================================
// * Update Line
//=============================================================================
Sprite_StressBar.prototype.updateLine = function(stressed) {
if (this._pendingEKGRow >= 0) {
if (this.canLinesConnect()) {
this._ekgRow = this._pendingEKGRow;
this._pendingEKGRow = -1;
this.refreshEKGBitmap();
if(!stressed) {this.drawStressCountValue(this._ekgRow);}
};
};
var bitmap = this._ekgLineBitmap;
var space = 40
this._lx = (this._lx + 1) % (bitmap.width + space)
this._ekgLine.bitmap.blt(bitmap, this._lx, 0, 1, bitmap.height, this._lx, 0);
this._ekgLine.bitmap.clearRect(this._lx - space, 0, 1, bitmap.height);
};
//=============================================================================
// * Update Background Image
//=============================================================================
Sprite_StressBar.prototype.updateBackgroundImage = function() {
// Get Background Name
let backgroundName = 'StressBar_DreamWorld';
// Set Index to 0
let index = 0;
// Set Default Rows
let rows = 5;
// Get Stress
let stress = $gameParty.stressEnergyCount;
if ($gameParty.actorIsAffectedByState(1, 20) || $gameParty.actorIsAffectedByState(8, 20)) {
stress = 10;
}
switch ($gameVariables.value(22)) {
case 1:
// Set Index
index = Math.min(Math.max(Math.floor(stress / 2), 0), 4);
break;
case 3:
case 4:
backgroundName = 'StressBar_BlackSpace';
rows = 4;
if (stress === 10) {
index = 2;
} else if (stress > 6 && stress < 10) {
index = 2;
} else if (stress > 3 && stress <= 6) {
index = 1;
} else {
index = 0;
};
break;
};
// Get Bitmap
let bitmap = ImageManager.loadSystem(backgroundName);
// Get Height
let height = bitmap.height / rows;
// Set Background Bitmap
this._background.bitmap = bitmap;
// Set Background Frame
bitmap.addLoadListener(() => this._background.setFrame(0, index * height, bitmap.width, height));
};
// //=============================================================================
// // * Update Background Animation
// //=============================================================================
// Sprite_StressBar.prototype.updateBackgroundAnimation = function() {
// // Get Animation object
// let anim = this._backAnim;
// // If Animation has more than 1 frame
// if (anim.animate && anim.maxFrames > 1) {
// // Decrease Delay
// anim.delay--;
// // If Animation delay is or less
// if (anim.delay <= 0) {
// // Increase Frame
// anim.frame = (anim.frame + 1) % anim.maxFrames;
// anim.delay = anim.maxDelay;
// // Set Frame
// this._background.setFrame(0, anim.frame * this._background.height, this._background.width, this._background.height);
// };
// };
// };
//=============================================================================
// ** Sprite_Actor
//-----------------------------------------------------------------------------
// The sprite for displaying an actor.
//=============================================================================
// * Setup Animation (Overwritten to Prevent it from using animations.)
//=============================================================================
Sprite_Actor.prototype.setupAnimation = function() { };
//=============================================================================
// * Setup Animation (Overwritten to Prevent it from clearing damage)
//=============================================================================
Sprite_Actor.prototype.setupDamagePopup = function() { };
//=============================================================================
// ** Window_OmoriBattleActorStatus
//-----------------------------------------------------------------------------
// This window displays the quest list header.
//=============================================================================
function Window_OmoriBattleActorStatus() { this.initialize.apply(this, arguments); }
Window_OmoriBattleActorStatus.prototype = Object.create(Window_Base.prototype);
Window_OmoriBattleActorStatus.prototype.constructor = Window_OmoriBattleActorStatus;
//=============================================================================
// * Initialize Object
//=============================================================================
Window_OmoriBattleActorStatus.prototype.initialize = function(index, layers, x, y) {
// Set Home Position
this._homePosition = new Point(x, y);
// Set Display Layers Object
this._displayLayers = layers
// Set Actor Index
this._actorIndex = index;
// Animation Values
this._hpAnim = {current: -2, target: 0, old: -1, duration: 0 };
this._mpAnim = {current: -2, target: 0, old: -1, duration: 0 };
// Selected Flag
this._selected = false;
this._overlayOpacity = 0;
this._overlayAngle = 0;
// ACS Bubble Opacity Duration
this._acsBubbleOpacityDuration = 0;
this._acsBubbleOpacity = 0;
// Overlay Animation
this._overlayAnim = {side: 0, delay: 15}
// Initialize Damage Sprites Array
this._damageSprites = [];
this._removeDamageSprites = [];
this._popupCount = 0;
// Super Call
Window_Base.prototype.initialize.call(this, 14, 100, this.windowWidth(), this.windowHeight());
this.opacity = 0;
// Create Sprites
this.createSprites();
// Draw Contents
this.refresh();
};
//=============================================================================
// * Settings
//=============================================================================
Window_OmoriBattleActorStatus.prototype.standardPadding = function() { return 0; };
Window_OmoriBattleActorStatus.prototype.windowWidth = function() { return 114; };
Window_OmoriBattleActorStatus.prototype.windowHeight = function() { return 164; };
//=============================================================================
// * Get Actor
//=============================================================================
Window_OmoriBattleActorStatus.prototype.actor = function() {
return $gameParty.memberAtStatusIndex(this._actorIndex)
};
//=============================================================================
// * Create Sprite
//=============================================================================
Window_OmoriBattleActorStatus.prototype.createSprites = function() {
// Get Layers
var layers = this._displayLayers;
// Get Position
var pos = this._homePosition;
// Create status Back Sprite
this._statusBackSprite = new Sprite();
this._statusBackSprite.bitmap = ImageManager.loadSystem('faceset_states')
this._statusBackSprite.x = pos.x + 7;
this._statusBackSprite.y = pos.y + 17;
this.setStatusBack(0, false);
layers._statusBack.addChild(this._statusBackSprite);
// Create Face Sprite
this._faceSprite = new Sprite_OmoMenuStatusFace();
this._faceSprite.x = pos.x + (this.width - 106) / 2;
this._faceSprite.y = pos.y + 15
layers._face.addChild(this._faceSprite);
// Set Actor
this._faceSprite.actor = this.actor();
// Face Mask
this._faceMask = new Sprite(new Bitmap(this.width - 14, 92))
this._faceMask.x = 7;
this._faceMask.y = 25;
this._faceMask.bitmap.fillAll('rgba(255, 255, 255, 1)')
this._faceSprite.mask = this._faceMask;
this.addChild(this._faceMask);
// // Face Mask
// this._faceMask = new PIXI.Graphics();
// this._faceMask.beginFill(0xFFF);
// // this._faceMask.drawRect(7, 25, this.width - 14, 92);
// this._faceMask.endFill();
// // this._faceSprite.mask = this._faceMask
// this.addChild(this._faceMask)
// Create Polaroid Sprite
this._polaroidSprite = new Sprite(ImageManager.loadSystem('player_box'));
this._polaroidSprite.x = pos.x;
this._polaroidSprite.y = pos.y;
layers._polaroid.addChild(this._polaroidSprite);
// Create HP Bar
this._hpBarSprite = new Sprite(ImageManager.loadSystem('bar_gradients'));
this._hpBarSprite.x = pos.x + 28
this._hpBarSprite.y = pos.y + 127;
this._hpBarSprite.setFrame(0, 0, 81, 12);
layers._polaroid.addChild(this._hpBarSprite);
// Create HP Bar
this._mpBarSprite = new Sprite(ImageManager.loadSystem('bar_gradients'));
this._mpBarSprite.x = pos.x + 28
this._mpBarSprite.y = pos.y + 146;
this._mpBarSprite.setFrame(0, 19, 81, 12);
layers._polaroid.addChild(this._mpBarSprite);
// Create State Sprite
this._stateSprite = new Sprite(ImageManager.loadSystem('statelist'));
this._stateSprite.anchor.set(0.5, 0.5);
this._stateSprite.x = pos.x + this.width / 2;
this._stateSprite.y = pos.y + 14;
this._stateSprite.setFrame(0, 0 * 24, 134, 24)
layers._polaroid.addChild(this._stateSprite);
// Create Selected Overlay
this._selectedOverlay = new Sprite(ImageManager.loadSystem('target_selected'))
this._selectedOverlay.x = pos.x + -12
this._selectedOverlay.y = pos.y + -3
this._selectedOverlay.opacity = 0;
layers._polaroid.addChild(this._selectedOverlay);
// Create Status Particle Emitters
this.createStatusParticleEmitters();
// Create ACS Bubble Sprites
this.createACSBubbleSprites();
layers._polaroid.addChild(this._windowContentsSprite)
this._windowContentsSprite.x = pos.x;
this._windowContentsSprite.y = pos.y;
// Create Damage Container
this._damageContainer = new Sprite();
layers._polaroid.addChild(this._damageContainer);
};
//=============================================================================
// * Create Status Particle Emitters
//=============================================================================
Window_OmoriBattleActorStatus.prototype.createStatusParticleEmitters = function() {
// Get Layers
var layers = this._displayLayers;
// Get Position
var pos = this._homePosition;
// Get Layer List
var layerList = [layers._statusBack, layers._face, layers._polaroid]
// Initialize Particle Emitters
this._statusParticleEmitters = [];
// Go Through Layer List
for (var i = 0; i < layerList.length; i++) {
// Get Layer
var layer = layerList[i];
// Create Particle Emitter
var sprite = new Sprite_BattleFaceStatusEmitter();
sprite.x = pos.x + this.width / 2;
sprite.y = pos.y + 120;
// sprite.mask = this._faceMask
// Add Particle to Array
this._statusParticleEmitters[i] = sprite;
// Add Particle Emitter to Layer
layer.addChild(sprite);
};
// Set The Mask of the last sprite to null
sprite.mask = null;
};
//=============================================================================
// * Create ACS Bubble Sprites
//=============================================================================
Window_OmoriBattleActorStatus.prototype.createACSBubbleSprites = function() {
// Create ACS Bubble container
this._acsBubbleContainer = new Sprite();
this._acsBubbleContainer.opacity = 0;
this.addChild(this._acsBubbleContainer);
// Action Chain Skills Bubble Sprites
this._acsBubbleSprites = [];
// Bubbles
var bubbles = [[0, 1, 2], [4, 5,6], [9, 8, 7], [12, 11, 10]];
// Create Bubble Sprites
for (var i = 0; i < 3; i++) {
// Create Sprite
var sprite = new Sprite_ACSBubble(this._actorIndex);
sprite.updatePosition(i);
this._acsBubbleSprites[i] = sprite;
this._acsBubbleContainer.addChild(sprite);
};
};
//=============================================================================
// * Refresh
//=============================================================================
Window_OmoriBattleActorStatus.prototype.refresh = function() {
// Get Actor
var actor = this.actor();
// If Actor Exists
if (actor) {
this.setStatusBack(actor.statusBackIndex());
this.setStatusHeader(actor.statusListIndex());
this._faceSprite.setAnimRow(actor.statusFaceIndex())
this.setupStatusParticles(actor.statusStateParticlesData())
};
// Draws Actor Index for testing and tracking
// this.contents.drawText(this._actorIndex, 10, 0, 50, 50);
};
//=============================================================================
// * Draw HP
//=============================================================================
Window_OmoriBattleActorStatus.prototype.drawHP = function(hp, maxHP) {
this.contents.fontSize = LanguageManager.getMessageData("XX_BLUE.Window_OmoriBattleActorStatus").drawHP_contents_fontsize;
var y = 112 //112
const loc_position = LanguageManager.getMessageData("XX_BLUE.Window_OmoriBattleActorStatus").drawHP_contents_clearRect_position;
this.contents.clearRect(loc_position[0], eval(loc_position[1]), this.width, 24);
var maxText = ' ' + maxHP
var width = this.textWidth(maxText) + 11;
this.drawText(hp, 0, y, this.width - width, 'right');
this.drawText(maxText, 0, y, this.width - 10,'right');
this.drawText('/', 0, y + 1, this.width - width + 5,'right');
};
//=============================================================================
// * Draw HP
//=============================================================================
Window_OmoriBattleActorStatus.prototype.drawMP = function(mp, maxMP) {
this.contents.fontSize = LanguageManager.getMessageData("XX_BLUE.Window_OmoriBattleActorStatus").drawMP_contents_fontsize;
var y = 131; // 131
this.contents.clearRect(0, y + 10, this.width, 24);
var maxText = ' ' + maxMP
var width = this.textWidth(maxText) + 11;
this.drawText(mp, 0, y, this.width - width, 'right');
this.drawText(maxText, 0, y, this.width - 10,'right');
this.drawText('/', 0, y + 1, this.width - width + 5,'right');
};
//=============================================================================
// * Frame Update
//=============================================================================
Window_OmoriBattleActorStatus.prototype.update = function() {
// Super Call
Window_Base.prototype.update.call(this);
// Update Positions
this.updatePositions();
// Update Status back fading
this.updateStatusBackFade();
// Update Bars
this.updateBars();
// Update Animation
this.updateAnimation();
// Update Overlay
this.updateOverlay()
// Update Damage
this.updateDamage();
// Update ACS Bubbles
this.updateACSBubbles();
};
//=============================================================================
// * Update Positions
//=============================================================================
Window_OmoriBattleActorStatus.prototype.updatePositions = function() {
this._statusBackSprite.x = this.x + 7;
this._statusBackSprite.y = this.y + 17;
this._faceSprite.x = this.x + (this.width - 106) / 2;
this._faceSprite.y = this.y + 15
this._polaroidSprite.x = this.x;
this._polaroidSprite.y = this.y;
this._hpBarSprite.x = this.x + 28
this._hpBarSprite.y = this.y + 127;
this._mpBarSprite.x = this.x + 28
this._mpBarSprite.y = this.y + 146;
this._stateSprite.x = this.x + this.width / 2;
this._stateSprite.y = this.y + 14;
this._selectedOverlay.x = this.x + -12
this._selectedOverlay.y = this.y + -3
this._windowContentsSprite.x = this.x;
this._windowContentsSprite.y = this.y;
// Go Through Layer List
for (var i = 0; i < this._statusParticleEmitters.length; i++) {
// Create Particle Emitter
var sprite = this._statusParticleEmitters[i]
sprite.x = this.x + this.width / 2;
sprite.y = this.y + 120;
};
};
//=============================================================================
// * Set Status Header
//=============================================================================
Window_OmoriBattleActorStatus.prototype.setStatusHeader = function(index) {
this._stateSprite._frame.y = index * 24;
this._stateSprite._refresh()
};
//=============================================================================
// * Start Animation
//=============================================================================
Window_OmoriBattleActorStatus.prototype.setStatusBack = function(index, fade = true) {
// If Fade flag
if (fade) {
// Create Sprite
var sprite = new Sprite(ImageManager.loadSystem('faceset_states'));
// Get Status Back Frame
var frame = this._statusBackSprite._frame;
// Set Sprite Frame
sprite.setFrame(frame.x, frame.y, frame.width, frame.height);
// Add Sprite to Status Back Sprite
this._statusBackSprite.addChildAt(sprite, 0)
};
var width = 100, height = 100;
var sx = (index % 4) * height;
var sy = Math.floor(index / 4) * width;
this._statusBackSprite.setFrame(sx, sy, width, height);
};
//=============================================================================
// * Setup Status State Particles
//=============================================================================
Window_OmoriBattleActorStatus.prototype.setupStatusParticles = function(data) {
// Get Layers
var layers = ['behind', 'front', 'top'];
// If Data Exists
if (data) {
// Go through layers
for (var i = 0; i < layers.length; i++) {
// Get Layer Data
var layerData = data[layers[i]];
// Get Particles
var particles = this._statusParticleEmitters[i];
// If Layer Data Exists
if (layerData) {
particles.setupGenerator(layerData)
particles.activate();
} else {
// Clear and Deactivate
particles.clear(); particles.deactivate();
}
}
} else {
// Go through layers
for (var i = 0; i < layers.length; i++) {
// Get Particles
var particles = this._statusParticleEmitters[i];
// Clear and Deactivate
particles.clear(); particles.deactivate();
}
};
};
//=============================================================================
// * Start Animation
//=============================================================================
Window_OmoriBattleActorStatus.prototype.startAnimation = function(layer, animation, mirror, delay) {
// Set Default Animation Layer
var animLayer = this._displayLayers._animation4
switch (layer) {
case 0: animLayer = this._displayLayers._animation0 ;break;
case 1: animLayer = this._displayLayers._animation1 ;break;
case 2: animLayer = this._displayLayers._animation2 ;break;
case 3: animLayer = this._displayLayers._animation4 ;break;
};
// Get Layers
var sprite = animLayer.startAnimation(animation, false, 0);
sprite.setHomePosition(this._homePosition.x, this._homePosition.y);
};
//=============================================================================
// * Update Animation
//=============================================================================
Window_OmoriBattleActorStatus.prototype.updateAnimation = function() {
// Get Actor
var actor = this.actor();
// If Actor
if (actor) {
while (actor.isAnimationRequested()) {
var data = actor.shiftAnimation();
var animation = $dataAnimations[data.animationId];
var mirror = data.mirror;
var delay = animation.position === 3 ? 0 : data.delay;
var layer = DataManager.animationLayer(animation);
this.startAnimation(layer, animation, mirror, delay);
};
};
};
//=============================================================================
// * Update Status Back Fade
//=============================================================================
Window_OmoriBattleActorStatus.prototype.updateStatusBackFade = function() {
// If Status Back Sprite has children
if (this._statusBackSprite.children.length > 0) {
// Remove Flag
var remove = false;
// Get Children
var children = this._statusBackSprite.children;
// Go Through children
for (var i = 0; i < children.length; i++) {
var sprite = children[i];
// Decrease Opacity
sprite.opacity -= 10;
// If sprite opacity is 0 or less
if (sprite.opacity <= 0) { remove = true; };
};
// If remove flag is true
if (remove) {
// Go Through children
children.forEach(function(child) {
// If Child opacity is 0 or less remove from parent
if (child.opacity <= 0) { this._statusBackSprite.removeChild(child); };
}, this);
}
};
};
//=============================================================================
// * Update Damage
//=============================================================================
Window_OmoriBattleActorStatus.prototype.updateDamage = function() {
// Get Actor
var actor = this.actor();
// If Actor Exists
if (actor) {
if (actor.isDamagePopupRequested()) {
// Create Damage sprite
var damage = new Sprite_Damage();
damage.x = this.width / 2;
damage.y = this.height - (40 + (20 * Math.floor(actor._damagePopup.length / 3))) + (40 * this._popupCount);
damage.x += this._homePosition.x;
damage.y += this._homePosition.y + 2;
damage.setup(actor);
// Get Result
var result = actor._damagePopup[0] || actor.result();
this._damageContainer.addChild(damage);
this._damageSprites.push(damage);
// If Damage is more than 0
if (result.hpDamage > 0) {
// Set Damage Face Animation
if(!$gameTemp._secondChance || actor.actorId() !== 1) {this._faceSprite.setAnimRow(9)}
};
this._popupCount++;
// Clear Results
//actor.clearDamagePopup();
//actor.clearResult();
}
else {
if(this._popupCount > 0) {this._popupCount = 0;}
}
};
// Go Through Damage Sprites
for (var i = 0; i < this._damageSprites.length; i++) {
// Get Sprite
var sprite = this._damageSprites[i];
// If Damage is not playing anymore
if (!sprite.isPlaying()) { this._removeDamageSprites.push(sprite); };
};
// If Removed Damage Sprites length is more than 0
if (this._removeDamageSprites.length > 0) {
// Go Through Removed Damage Sprites
for (var i = 0; i < this._removeDamageSprites.length; i++) {
// Get Sprite
var sprite = this._removeDamageSprites[i];
// Get Index
var index = this._damageSprites.indexOf(sprite);
// If Index exist
if (index >= 0) { this._damageSprites.splice(index, 1); };
// Remove Sprite
this._damageContainer.removeChild(sprite);
};
// Clear Remove Damage sprites
this._removeDamageSprites = [];
};
};
//=============================================================================
// * Update Bars
//=============================================================================
Window_OmoriBattleActorStatus.prototype.updateBars = function() {
// Get Actor
var actor = this.actor();
// If Actor Exists
if (actor) {
// Get Animation
var anim = this._hpAnim
if (actor.hp !== anim.old) {
anim.target = actor.hp;
anim.old = actor.hp
anim.duration = Math.abs(anim.current - anim.target).clamp(0, 30);;
};
anim = this._mpAnim
if (actor.mp !== anim.old) {
anim.target = actor.mp;
anim.old = actor.mp
anim.duration = Math.abs(anim.current - anim.target).clamp(0, 30);;
};
};
// If HP Animation Duration is more than 0
if (this._hpAnim.duration > 0) {
var anim = this._hpAnim;
anim.current = (anim.current * (anim.duration - 1) + anim.target) / anim.duration;
anim.duration--;
this.drawHP(Math.round(anim.current), actor.mhp)
var width = (anim.current / actor.mhp) * 81;
this._hpBarSprite._frame.width = width;
this._hpBarSprite._refresh();
}
// If MP Animation Duration is more than 0
if (this._mpAnim.duration > 0) {
var anim = this._mpAnim;
anim.current = (anim.current * (anim.duration - 1) + anim.target) / anim.duration;
anim.duration--;
this.drawMP(Math.round(anim.current), actor.mmp)
var width = (anim.current / actor.mmp) * 81;
this._mpBarSprite._frame.width = width;
this._mpBarSprite._refresh();
};
};
//=============================================================================
// * Update Bars
//=============================================================================
Window_OmoriBattleActorStatus.prototype.updateOverlay = function() {
// If Selected
if (this._selected) {
// Get Animation
var anim = this._overlayAnim;
// If Animation delay is 0
if (anim.delay <= 0) {
if (anim.side === 0) {
this._selectedOverlay.opacity += 15;
if (this._selectedOverlay.opacity >= 255) {
anim.side = 1; anim.delay = 40;
};
} else {
this._selectedOverlay.opacity -= 15;
if (this._selectedOverlay.opacity <= 0) {
anim.side = 0; anim.delay = 10;
};
};
} else {
// Decrease Delay
anim.delay--
};
} else if (this._selectedOverlay.opacity > 0 || this._overlayAnim.side === 1) {
// Decrease Opacity
this._selectedOverlay.opacity -= 25;
// If Overlay opacity is 0 or less (Finished fading out)
if (this._selectedOverlay.opacity <= 0) {
// Reset Side & Delay
this._overlayAnim.side = 0;
this._overlayAnim.delay = 0;
};
};
};
//=============================================================================
// * Show ACS Bubbles
//=============================================================================
Window_OmoriBattleActorStatus.prototype.showACSBubbles = function(duration = 15) {
this._acsBubbleOpacityDuration = duration;
this._acsBubbleOpacity = 255
};
//=============================================================================
// * Hide ACS Bubbles
//=============================================================================
Window_OmoriBattleActorStatus.prototype.hideACSBubbles = function(duration = 15) {
this._acsBubbleOpacityDuration = duration;
this._acsBubbleOpacity = 0
};
//=============================================================================
// * Setup ACS Bubbles
//=============================================================================
Window_OmoriBattleActorStatus.prototype.setupACSBubbles = function(list) {
// Get Actor
var actor = this.actor();
for (var i = 0; i < this._acsBubbleSprites.length; i++) {
// Get Skill
var data = list[i];
// Get Bubble
var bubble = this._acsBubbleSprites[i];
// Update Position
bubble.updatePosition(i);
// If Data
if (data) {
// Get Skill
var skill = data[1];
// Bubble Index
var bubbleIndex = skill.meta.ChainSkillIcon === undefined ? 0 : Number(skill.meta.ChainSkillIcon);
// If Skill is Chain Skill Energy Release And Energy is at max
if (skill.meta.ChainSkillEnergyRelease && $gameParty.stressEnergyCount >= 10) {
// Change Index
bubbleIndex = $gameParty.size() === 1 ? 3 : 2;
bubble.startShake();
} else {
bubble.stopShake();
};
// Set Bubble Index
bubble.setBubbleIndex(bubbleIndex);
bubble.setArrowDirection(data[0]);
actor.canUse(skill) ? bubble.activate() : bubble.deactivate();
};
};
};
//=============================================================================
// * Select ACS Bubble
//=============================================================================
Window_OmoriBattleActorStatus.prototype.selectACSBubble = function(direction) {
for (var i = 0; i < this._acsBubbleSprites.length; i++) {
// Get Bubble
var bubble = this._acsBubbleSprites[i];
if (bubble._arrowDirection === direction) {
bubble.fadeOpacity(255, 5)
} else {
bubble.deactivate();
bubble.fadeOpacity(0, 5)
};
};
};
//=============================================================================
// * Update ACS Bubbles
//=============================================================================
Window_OmoriBattleActorStatus.prototype.updateACSBubbles = function() {
// Get Sprite
var sprite = this._acsBubbleContainer;
// If ACS Bubble duration is more than 0
if (this._acsBubbleOpacityDuration > 0) {
var d = this._acsBubbleOpacityDuration;
sprite.opacity = (sprite.opacity * (d - 1) + this._acsBubbleOpacity) / d;
this._acsBubbleOpacityDuration--;
};
};
//=============================================================================
// ** Window_ActorCommand
//-----------------------------------------------------------------------------
// The window for selecting an actor's action on the battle screen.
//=============================================================================
// Alias Listing
//=============================================================================
_TDS_.OmoriBattleSystem.Window_ActorCommand_makeCommandList = Window_ActorCommand.prototype.makeCommandList;
//=============================================================================
// * Object Initilization
//=============================================================================
Window_ActorCommand.prototype.initialize = function() {
// Set Custom Cursor X Offset
this._customCursorXOffset = 0;
// Set Max Command Columns
this._commandMaxCols = 2;
// Super Call
Window_Command.prototype.initialize.call(this, 0, 0);
// Create Command Sprites
this.createCommandSprites()
this.opacity = 0;
this.deactivate();
this._actor = null;
this.openness = 0;
};
//=============================================================================
// * Settings
//=============================================================================
Window_ActorCommand.prototype.windowWidth = function() { return 360; };
Window_ActorCommand.prototype.numVisibleRows = function() { return 4; };
Window_ActorCommand.prototype.isUsingCustomCursorRectSprite = function() { return true; };
Window_ActorCommand.prototype.maxCols = function() { return this._commandMaxCols; };
Window_ActorCommand.prototype.standardPadding = function() { return 0; };
Window_ActorCommand.prototype.itemHeight = function() { return 59 - 17; };
Window_ActorCommand.prototype.itemWidth = function() { return 178; };
Window_ActorCommand.prototype.customCursorRectXOffset = function() { return this._customCursorXOffset; }
Window_ActorCommand.prototype.customCursorRectYOffset = function() { return 0; }
Window_ActorCommand.prototype.spacing = function() { return 4; };
//=============================================================================
// * Item Rect
//=============================================================================
Window_ActorCommand.prototype.itemRect = function(index) {
// Get Rect
var rect = Window_Command.prototype.itemRect.call(this, index);
// rect.x += 15;
// rect.y -= 5;
// console.log(index, rect)
return rect;
};
//=============================================================================
// * Make Command List
//=============================================================================
Window_ActorCommand.prototype.makeCommandList = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Window_ActorCommand_makeCommandList.call(this);
// If world index is 3
if ($gameVariables.value(22) === 3 || $gameVariables.value(22) === 4) {
// Remove all commands past the second one
this._list.splice(2, 99);
};
};
//=============================================================================
// * Draw Item
//=============================================================================
Window_ActorCommand.prototype.drawItem = function(index) {};
//=============================================================================
// * Determine if Current Item is Enabled
//=============================================================================
Window_ActorCommand.prototype.isCurrentItemEnabled = function() {
// If Command is disabled return false
if (this._actor && this._actor.isBattleCommandDisabled(this.index())) { return false; }
// Return Original Function
return Window_Command.prototype.isCurrentItemEnabled.call(this);
};
//=============================================================================
// * Create Command Sprites
//=============================================================================
Window_ActorCommand.prototype.createCommandSprites = function() {
// Set Command Name
let commandName = 'BattleCommands_DreamWorld';
// Set Default Custom cursor X Offset
this._customCursorXOffset = 12;
// Set Default Max Columns
this._commandMaxCols = 2;
// Set Command
switch ($gameVariables.value(22)) {
case 1:
commandName = 'BattleCommands_DreamWorld';
this._commandMaxCols = 2;
break;
case 2: commandName = 'BattleCommands_Faraway' ;break;
case 3:
commandName = 'BattleCommands_BlackSpace';
this._customCursorXOffset = 90;
this._commandMaxCols = 1;
// commandName = 'BattleCommands_BS_ATK_SKILL';
// this._commandMaxCols = 1;
// this._customCursorXOffset = 90;
// break;
case 4:
commandName = 'BattleCommands_BlackSpace';
this._customCursorXOffset = 90;
this._commandMaxCols = 1;
break;
case 5:
commandName = 'BattleCommands_BlackSpace';
this._customCursorXOffset = 90;
this._commandMaxCols = 1;
break;
};
// Initialize Command Sprites Array
this._commandSprites = [];
// Get Bitmap
var bitmap = ImageManager.loadSystem(commandName);
var sw = bitmap.width / this._commandMaxCols;
var sh = bitmap.height / 2;
for (var i = 0; i < 4; i++) {
// Create Command Sprite
let sprite = new Sprite(bitmap);
// Get Item Rectangle
let rect = this.itemRect(i);
let sx = (i % this._commandMaxCols) * sw;
let sy = Math.floor(i / this._commandMaxCols) * sh;
sprite.setFrame(sx, sy, sw, sh, 0, 0);
// sprite.x = rect.x - ((i % 2) * 2);
sprite.x = rect.x;
sprite.y = rect.y;
this._commandSprites[i] = sprite;
this.addChildToBack(sprite)
};
};
//=============================================================================
// ** Window_BattleStatus
//-----------------------------------------------------------------------------
// The window for displaying the status of party members on the battle screen.
//=============================================================================
// * Object Initilization
//=============================================================================
Window_BattleStatus.prototype.initialize = function() {
// Super Call
Window_Selectable.prototype.initialize.call(this, 30, 0, 1, 1);
// Window_Selectable.prototype.initialize.call(this, 30 + 100, 0 + 100, 1 + 300, 1 + 300);
this.opacity = 0;
};
//=============================================================================
// * Update Arrows
//=============================================================================
Window_BattleStatus.prototype._updateArrows = function() {
this._downArrowSprite.visible = false;
this._upArrowSprite.visible = false;
};
//=============================================================================
// * Settings
//=============================================================================
Window_BattleStatus.prototype.maxCols = function() { return 2;};
//=============================================================================
// * Refresh
//=============================================================================
Window_BattleStatus.prototype.refresh = function() {
// If Face Windows Exist
if (this._faceWindows) {
// Go Through Face Windows
for (var i = 0; i < this._faceWindows.length; i++) {
// Refresh Face Windows
this._faceWindows[i].refresh();
};
};
};
//=============================================================================
// * Update Cursor
//=============================================================================
Window_BattleStatus.prototype.updateCursor = function() {
// Super Call
Window_Selectable.prototype.updateCursor.call(this);
// Update Selected Face Windows
this.updateSelectedFaceWindows();
};
//=============================================================================
// * Update Selected face windows
//=============================================================================
Window_BattleStatus.prototype.updateSelectedFaceWindows = function() {
// If Face Windows Exist
if (this._faceWindows) {
// Go Through Face Windows
for (var i = 0; i < this._faceWindows.length; i++) {
// Set Selected State of face window
this._faceWindows[i]._selected = i === this._index;
};
};
};
//=============================================================================
// * Find Next Index in Direction
//=============================================================================
Window_BattleStatus.prototype.findNextIndexInDirection = function(direction, index = this.index()) {
switch (direction) {
case 'up':
// Index Switch Case
switch (index) {
case 2: // Omori
if ($gameParty.memberAtStatusIndex(0)) { return 0; };
if ($gameParty.memberAtStatusIndex(1)) { return 1; };
break;
case 3: // Hero
if ($gameParty.memberAtStatusIndex(1)) { return 1; };
if ($gameParty.memberAtStatusIndex(0)) { return 0; };
break;
};
break;
case 'down':
// Index Switch Case
switch (index) {
case 0: // Aubrey
if ($gameParty.memberAtStatusIndex(2)) { return 2; };
if ($gameParty.memberAtStatusIndex(3)) { return 3; };
break;
case 1: // Kel
if ($gameParty.memberAtStatusIndex(3)) { return 3; };
if ($gameParty.memberAtStatusIndex(2)) { return 2; };
break;
};
break;
case 'left':
// Index Switch Case
switch (index) {
case 1: // Kel
if ($gameParty.memberAtStatusIndex(0)) { return 0; };
if ($gameParty.memberAtStatusIndex(2)) { return 2; };
break;
case 3: // Hero
if ($gameParty.memberAtStatusIndex(2)) { return 2; };
if ($gameParty.memberAtStatusIndex(0)) { return 0; };
break;
};
break;
case 'right':
// Index Switch Case
switch (index) {
case 0: // Aubrey
if ($gameParty.memberAtStatusIndex(1)) { return 1; };
if ($gameParty.memberAtStatusIndex(3)) { return 3; };
break;
case 2: // Omori
if ($gameParty.memberAtStatusIndex(3)) { return 3; };
if ($gameParty.memberAtStatusIndex(1)) { return 1; };
break;
};
break;
};
// Return provided Index
return index;
};
//=============================================================================
// * Update Index from Direction
//=============================================================================
Window_BattleStatus.prototype.updateIndexFromDirection = function(direction, index = this.index()) {
// If Index is more than -1
if (index >= 0) {
// Set Index
this._index = this.findNextIndexInDirection(direction, index);
// Update Cursor
this.updateCursor();
// Update Selected face windows
this.updateSelectedFaceWindows();
};
};
//=============================================================================
// * Cursor Up
//=============================================================================
Window_BattleStatus.prototype.cursorUp = function(wrap) {
this.updateIndexFromDirection('up');
};
//=============================================================================
// * Cursor Down
//=============================================================================
Window_BattleStatus.prototype.cursorDown = function(wrap) {
this.updateIndexFromDirection('down');
};
//=============================================================================
// * Cursor Left
//=============================================================================
Window_BattleStatus.prototype.cursorLeft = function(wrap) {
this.updateIndexFromDirection('left');
};
//=============================================================================
// * Cursor Left
//=============================================================================
Window_BattleStatus.prototype.cursorRight = function(wrap) {
this.updateIndexFromDirection('right');
};
//=============================================================================
// * Show Actor chain Skill bubbles
//=============================================================================
Window_BattleStatus.prototype.showActorChainSkillBubbles = function(actor, list) {
// Go Through Windows
for (var i = 0; i < this._faceWindows.length; i++) {
var win = this._faceWindows[i];
var selected = win.actor() === actor;
if (selected) {
win.showACSBubbles(15);
win.setupACSBubbles(list);
} else {
win.hideACSBubbles(15);
};
};
};
//=============================================================================
// * Select Actor Chain Skill Bubble
//=============================================================================
Window_BattleStatus.prototype.selectActorChainSkillBubble = function(actor, direction) {
// Go Through Windows
for (var i = 0; i < this._faceWindows.length; i++) {
var win = this._faceWindows[i];
var selected = win.actor() === actor;
// If Selected
if (selected) {
win.selectACSBubble(direction)
break
};
};
};
//=============================================================================
// ** Window_BattleActor
//-----------------------------------------------------------------------------
// The window for selecting a target actor on the battle screen.
//=============================================================================
// * Frame Update
//=============================================================================
Window_BattleActor.prototype.update = function() {
// Super Call
Window_Selectable.prototype.update.call(this);
// If Input Shift is triggered
if (this.active && Input.isTriggered('shift')) {
// Call Group Target Swap
if (this._groupTargetSwap) { this._groupTargetSwap(); };
};
};
//=============================================================================
// * Determine if ok is enabled
//=============================================================================
Window_BattleActor.prototype.isOkEnabled = function() {
// let actor = this.actor();
// if (this._selectDead && actor) return actor.isDead();
return Window_Selectable.prototype.isOkEnabled.call(this);
};
//=============================================================================
// ** Window_BattleEnemy
//-----------------------------------------------------------------------------
// The window for selecting a target enemy on the battle screen.
//=============================================================================
// * Frame Update
//=============================================================================
Window_BattleEnemy.prototype.update = function() {
// Super Call
Window_Selectable.prototype.update.call(this);
// If Input Shift is triggered
if (this.active && Input.isTriggered('shift')) {
// Call Group Target Swap
if (this._groupTargetSwap) { this._groupTargetSwap(); };
};
};
//=============================================================================
// ** Window_PartyCommand
//-----------------------------------------------------------------------------
// The window for selecting an actor's action on the battle screen.
//=============================================================================
// * Object Initilization
//=============================================================================
Window_PartyCommand.prototype.initialize = function() {
Window_Command.prototype.initialize.call(this, 0, 0);
this.opacity = 0;
this.createCommandSprites();
this.createEscapeBlockSprites();
this.deactivate();
};
//=============================================================================
// * Settings
//=============================================================================
Window_PartyCommand.prototype.windowWidth = function() { return 360; };
Window_PartyCommand.prototype.numVisibleRows = function() { return 4; };
Window_PartyCommand.prototype.isUsingCustomCursorRectSprite = function() { return true; };
Window_PartyCommand.prototype.maxCols = function() { return 1; };
Window_PartyCommand.prototype.standardPadding = function() { return 0; };
Window_PartyCommand.prototype.itemHeight = function() { return 39; };
const _old_Window_Party_Command_maxTopRow = Window_PartyCommand.prototype.maxTopRow;
Window_PartyCommand.prototype.maxTopRow = function() {
if(typeof this.maxRows !== "function") {return 0;}
return _old_Window_Party_Command_maxTopRow.call(this);
}
//=============================================================================
// * Play Ok sound
//=============================================================================
Window_PartyCommand.prototype.playOkSound = function() {
// If world index is 5
if (SceneManager.currentWorldIndex() === 5) {
AudioManager.playSe({name: "SE_play", pan: 0, pitch: 100, volume: 90});
return
}
// Play Default Ok sound
Window_Command.prototype.playOkSound.call(this);
};
//=============================================================================
// * Item Rect
//=============================================================================
Window_PartyCommand.prototype.itemRect = function(index) {
// Get Rect
var rect = Window_Command.prototype.itemRect.call(this, index);
if ($gameVariables.value(22) === 5) {
rect.x += 95;
rect.y += 20;
} else {
rect.x += [60, 80][index]
};
return rect;
};
//=============================================================================
// * Make Command List
//=============================================================================
Window_PartyCommand.prototype.makeCommandList = function() {
this.addCommand(TextManager.fight, 'fight');
if ($gameVariables.value(22) !== 5) {
this.addCommand(TextManager.escape, 'escape', BattleManager.canEscape());
};
};
//=============================================================================
// * Draw Item
//=============================================================================
Window_PartyCommand.prototype.drawItem = function(index) { };
//=============================================================================
// * Create Escape Block Sprites
//=============================================================================
Window_PartyCommand.prototype.createEscapeBlockSprites = function() {
// Create Escape Block Container
this._escapeBlockContainer = new Sprite();
this.addChild(this._escapeBlockContainer);
};
//=============================================================================
// * Create Command Sprites
//=============================================================================
Window_PartyCommand.prototype.createCommandSprites = function() {
// Set Command Name
let commandName = 'party_command';
let commandsSize = 2;
// Set Command
switch ($gameVariables.value(22)) {
case 1: commandName = 'PartyCommands_DreamWorld' ;break;
case 2: commandName = 'PartyCommands_Faraway' ;break;
// case 3: commandName = 'party_command' ;break;
case 3: commandName = 'PartyCommands_BlackSpace' ;break;
case 4: commandName = 'PartyCommands_BlackSpace' ;break;
case 5: commandName = 'PartyCommands_FinalBattle'; commandsSize = 1 ;break;
};
// Hard code it to for simplicty sake
//if (BattleManager._battleRetried && $gameTroop._troopId == 891) {
if ($gameVariables.value(1220) >= 5 && $gameTroop._troopId == 891) {
commandName = 'PartyCommands_FinalBattle';
commandsSize = 1;
}
// Initialize Command Sprites Array
this._commandSprites = [];
// Get Bitmap
let bitmap = ImageManager.loadSystem(commandName);
bitmap.addLoadListener(() => {
if (commandsSize > 1) {
let height = bitmap.height / commandsSize;
for (var i = 0; i < commandsSize; i++) {
var sprite = new Sprite(bitmap);
sprite.setFrame(0, i * height, 360, height);
sprite.y = i * (height + 3);
this._commandSprites[i] = sprite;
this.addChildToBack(sprite)
};
} else {
let sprite = new Sprite(bitmap);
sprite.setFrame(0, 0, 360, bitmap.height);
sprite.y = 0;
this._commandSprites[i] = sprite;
this.addChildToBack(sprite)
};
})
};
//=============================================================================
// * Process Ok
//=============================================================================
Window_PartyCommand.prototype.processOk = function() {
// Get World Index
let world = $gameVariables.value(22);
// Get Current Command symbol
let symbol = this.currentSymbol();
// If escape command and world is 4 or 5
if (symbol === 'escape' && (world === 4 || world === 5)) {
// If Escape Block Container has no children
if (this._escapeBlockContainer.children.length === 0) {
// Start Escape Block Effect
this.startEscapeBlockEffect()
};
return;
};
// Remove Children
this._escapeBlockContainer.removeChildren();
// Run Original Function
Window_Command.prototype.processOk.call(this);
};
//=============================================================================
// * Start Escape Block Effect
//=============================================================================
Window_PartyCommand.prototype.startEscapeBlockEffect = function() {
// Set Spacing
let spacing = [20, 0, 30]
for (var s = 0; s < 2; s++) {
for (var i = 0; i < 3; i++) {
// Create Sprite
let sprite = new Sprite_BattleBSRedHand(s);
sprite.x = s === 0 ? (this.width - 60) + spacing[i] : -0 - spacing[i];
sprite.y = (this.itemRect(1).y - 25) + i * 13;
this._escapeBlockContainer.addChild(sprite);
};
};
};
//=============================================================================
// ** Sprite_BattleBSRedHand
//-----------------------------------------------------------------------------
// This sprite is used to display red hands in battle menus
//=============================================================================
function Sprite_BattleBSRedHand() { this.initialize.apply(this, arguments); }
Sprite_BattleBSRedHand.prototype = Object.create(Sprite.prototype);
Sprite_BattleBSRedHand.prototype.constructor = Sprite_BattleBSRedHand;
//=============================================================================
// * Object Initilization
//=============================================================================
Sprite_BattleBSRedHand.prototype.initialize = function(side = 0) {
// Super Call
Sprite.prototype.initialize.call(this);
// Set Side
this._side = side;
// Setup Bitmap
this.setupBitmap(side);
AudioManager.playSe({name: "SE_red_hands", pan: 0, pitch: 100, volume: 90});
// Set Move speed
this._moveSpeed = side === 0 ? -4 : 4
// Initialize Phase
this._phase = 0;
// Initialize Animation
this._animation = {frame: Math.randomInt(4), frames: [0, 1, 2, 1], count: 0, delay: 7};
// Initialize Opacity
this.opacity = 0;
};
//=============================================================================
// * Setup bitmap
//=============================================================================
Sprite_BattleBSRedHand.prototype.setupBitmap = function(side) {
// Get Bitmap
let bitmap = ImageManager.loadSystem('bsRedHands');
let width = bitmap.width / 3;
let height = bitmap.height / 2;
// Set Bitmap
this.bitmap = bitmap;
// Set Frame
this.setFrame(0, side * height, width, height);
};
//=============================================================================
// * Frame Update
//=============================================================================
Sprite_BattleBSRedHand.prototype.update = function() {
// Super Call
Sprite.prototype.update.call(this);
// Update Animation
this.updateAnimation();
};
//=============================================================================
// * Update Animation
//=============================================================================
Sprite_BattleBSRedHand.prototype.updateAnimation = function() {
if (this._phase === 0) {
// Increase Opacity
this.opacity += 30;
// Move by Amount of Move Speed
this.x += this._moveSpeed;
// Set Phase
if (this.opacity >= 255) { this._phase = 1;};
} else if (this._phase === 1) {
// Move Flag
let move = true;
// If side is 0
if (this._side === 0) {
move = this.x > 170;
} else {
move = this.x < 130;
};
// If can move
if (move) {
// Move by Amount of Move Speed
this.x += this._moveSpeed;
} else {
// Set Phase
this._phase = 2;
};
} else {
// Decrease Opacity
this.opacity -= 10;
// If Opacity is 0 or less
if (this.opacity <= 0) {
// Remove Child
this.parent.removeChild(this);
};
};
// Get Animation
let anim = this._animation;
// Decrease Animation Count
anim.count--;
// If animation count is 0 or less
if (anim.count <= 0) {
// Increase Frame
anim.frame = (anim.frame + 1) % anim.frames.length;
// Set Frame
this.setFrame(anim.frames[anim.frame] * this.width, this._frame.y, this.width, this.height);
// Resets Animation Count
anim.count = anim.delay;
};
};
//=============================================================================
// ** Window_ItemListBack
//-----------------------------------------------------------------------------
// This window displays the quest list header.
//=============================================================================
function Window_ItemListBack() { this.initialize.apply(this, arguments); }
Window_ItemListBack.prototype = Object.create(Window_Base.prototype);
Window_ItemListBack.prototype.constructor = Window_ItemListBack;
//=============================================================================
// * Initialize Object
//=============================================================================
Window_ItemListBack.prototype.initialize = function(width, height) {
// Super Call
Window_Base.prototype.initialize.call(this, 0, -30, width, height);
// Draw Separator
this.contents.fillRect(0, 28, this.contents.width, 2, 'rgba(255, 255, 255, 2)')
};
//=============================================================================
// * Settings
//=============================================================================
Window_ItemListBack.prototype.standardPadding = function() { return 4 };
Window_ItemListBack.prototype.standardFontSize = function() { return 20; };
//=============================================================================
// * Calculate Text Height
//=============================================================================
Window_ItemListBack.prototype.setItem = function(item) {
// Clear Rect
this.contents.clearRect(0, 0, this.contents.width, 28);
// If Item
if (DataManager.isItem(item)) {
// Set Bitmap Font color to null
this.contents.bitmapFontColor = null;
// Draw Item Count
this.contents.drawText(LanguageManager.getMessageData("XX_BLUE.Omori_Battle_System").hold.format($gameParty.battleNumItems(item)), 6, 2, 100, 20);
/*this.contents.drawText('EFFECT:', 0, 2, this.contents.width - 148, 20, 'right');
// Set Default HP Bonus
var hpBonus = 'N\\A', hpValue = 0;
// If There's an HP bonus
if (item.meta.HpEffect) {
// Get Effect
var effect = item.meta.HpEffect;
// Rate Check
var rateCheck = effect.match(/%$/) !== null;
// Set HP Value
hpValue = Number(effect.replace(/%$/, ''));
// Set HP Bonus
hpBonus = effect.trim();
};*/
// Set Default MP Bonus
/*var mpBonus = 'N\\A', mpValue = 0;
// If There's an MP bonus
if (item.meta.MpEffect) {
// Get Effect
var effect = item.meta.MpEffect;
// // Rate Check
// var rateCheck = effect.match(/%$/) !== null;
// Set HP Value
mpValue = Number(effect.replace(/%$/, ''));
// Set HP Bonus
mpBonus = effect.trim();
};*/
// Set Color
/*if (hpValue > 0) {
// Set HP Bonus Value
hpBonus = '+' + hpBonus;
this.contents.bitmapFontColor = BitmapFontManager.hexToRGB(this.powerUpColor());
} else if (hpBonus < 0) {
this.contents.bitmapFontColor = BitmapFontManager.hexToRGB(this.powerDownColor());
};
this.contents.drawText(hpBonus, this.contents.width - 119, 2, 42, 20, 'center');*/
// Set Bitmap Font color to null
/* this.contents.bitmapFontColor = null;
if (mpValue > 0) {
// Adjust MP Bonus
mpBonus = '+' + mpBonus;
this.contents.bitmapFontColor = BitmapFontManager.hexToRGB(this.powerUpColor());
} else if (mpBonus < 0) {
this.contents.bitmapFontColor = BitmapFontManager.hexToRGB(this.powerDownColor());
};
this.contents.drawText(mpBonus, this.contents.width - 49, 2, 42, 20, 'center');
// Draw Icons
this.drawHPIcon(this.contents.width - 137, 6);
this.drawMPIcon(this.contents.width - 70, 6);*/
};
// If Skill
if (DataManager.isSkill(item)) {
// Set Bitmap Font color to null
this.contents.bitmapFontColor = null;
this.contents.drawText(LanguageManager.getMessageData("XX_BLUE.Omori_Battle_System").cost, 6, 2, 100, 20);
this.contents.drawText(this._actor.skillMpCost(item), 0, 2, 95, 20, 'right');
this.drawMPIcon(100, 6);
};
};
//=============================================================================
// ** Window_BattleItem
//-----------------------------------------------------------------------------
// The window for selecting an item to use on the battle screen.
//=============================================================================
// * Object Initialization
//=============================================================================
Window_BattleItem.prototype.initialize = function(x, y, width, height) {
this._arrowBitmap = new Bitmap(50, 50);
this._arrowBitmap.fillAll('rgba(255, 0, 0, 1)')
// Super Call
Window_ItemList.prototype.initialize.call(this, x, y + 30, width, 90);
// Create Back Window
this._backWindow = new Window_ItemListBack(width, height)
this.addChildToBack(this._backWindow);
this.opacity = 0;
this.hide();
};
//=============================================================================
// * Settings
//=============================================================================
Window_BattleItem.prototype.isUsingCustomCursorRectSprite = function() { return true; };
Window_BattleItem.prototype.includes = function(item) { return $gameParty.canUse(item); };
Window_BattleItem.prototype.lineHeight = function() { return 24; };
Window_BattleItem.prototype.spacing = function() { return 0; };
Window_BattleItem.prototype.standardPadding = function() { return 10; };
Window_BattleItem.prototype.customCursorRectXOffset = function() { return -24; }
//=============================================================================
// * Determine if Item should be included
//=============================================================================
Window_BattleItem.prototype.includes = function(item) {
if (!DataManager.isItem(item)) { return false; };
if (!$gameParty.canUse(item)) { return false; }
if ($gameParty.battleNumItems(item) <= 0) { return false; };
// Category Switch Case
switch (this._category) {
case 'toys':
return DataManager.isToyItem(item);
case 'snacks':
return DataManager.isConsumableItem(item);
};
// Return false by default
return false;;
};
//=============================================================================
// * Item Rect
//=============================================================================
Window_BattleItem.prototype.itemRect = function(index) {
// Get Rect
var rect = Window_SkillList.prototype.itemRect.call(this, index);
rect.x += 36;
return rect;
};
//=============================================================================
// * Draw Item
//=============================================================================
Window_BattleItem.prototype.drawItem = function(index) {
var item = this._data[index];
this.contents.fontSize = 20;//24
if (item) {
var rect = this.itemRect(index);
rect.width -= this.textPadding();
rect.width -= 40;
this.changePaintOpacity(this.isEnabled(item));
// Get Name
var name = DataManager.itemShortName(item);
this.contents.drawText(name, rect.x, rect.y, rect.width, rect.height);
this.changePaintOpacity(1);
};
};
//=============================================================================
// * Refresh Arrows
//=============================================================================
Window_BattleItem.prototype._refreshArrows = function() {
// Super Call
Window_ItemList.prototype._refreshArrows.call(this);
this._upArrowSprite.x = this._width - 12;
this._downArrowSprite.x = this._upArrowSprite.x;
this._downArrowSprite.y = this.height - 33;
};
//=============================================================================
// * Update Help
//=============================================================================
Window_BattleItem.prototype.updateHelp = function() {
// Super Call
Window_ItemList.prototype.updateHelp.call(this);
if (this._backWindow) {
this._backWindow._actor = this._actor;
this._backWindow.setItem(this.item());
};
};
//=============================================================================
// * On Cursor Down
//=============================================================================
Window_BattleItem.prototype.cursorDown = function(wrap) {
var index = this.index();
var maxItems = this.maxItems();
var maxCols = this.maxCols();
if (index < maxItems - maxCols) {
this.select((index + maxCols) % maxItems);
} else if (index < maxItems && maxItems > 2 && index === maxItems - 2) {
this.select(maxItems-1);
}
};
//=============================================================================
// ** Window_BattleSkill
//-----------------------------------------------------------------------------
// The window for selecting skills to use on the battle screen.
//=============================================================================
// * Object Initialization
//=============================================================================
Window_BattleSkill.prototype.initialize = function(x, y, width, height) {
// Super Call
Window_SkillList.prototype.initialize.call(this, x, y + 30, width, 90);
// Create Back Window
this._backWindow = new Window_ItemListBack(width, height)
this.addChildToBack(this._backWindow);
this.opacity = 0;
this.hide();
};
//=============================================================================
// * Settings
//=============================================================================
Window_BattleSkill.prototype.isUsingCustomCursorRectSprite = function() { return true; };
//Window_BattleSkill.prototype.includes = function(item) { return Window_SkillList.prototype.includes };
Window_BattleSkill.prototype.lineHeight = function() { return 22; };
Window_BattleSkill.prototype.spacing = function() { return 0; };
Window_BattleSkill.prototype.standardPadding = function() { return 10; };
Window_BattleSkill.prototype.customCursorRectXOffset = function() { return -28; }
//=============================================================================
// * Determine if Item Should be included
//=============================================================================
Window_BattleSkill.prototype.includes = function(item) {
if (item) { return true; }
return false;
};
//=============================================================================
// * Item Rect
//=============================================================================
Window_BattleSkill.prototype.itemRect = function(index) {
// Get Rect
var rect = Window_SkillList.prototype.itemRect.call(this, index);
rect.x += 36;
return rect;
};
//=============================================================================
// * Select Last
//=============================================================================
Window_BattleSkill.prototype.selectLast = function() {
// Return 0 if not remembering command
if (!ConfigManager.commandRemember) { return this.select(0); };
// Run Original Function
Window_SkillList.prototype.selectLast.call(this);
};
//=============================================================================
// * Draw Item
//=============================================================================
Window_BattleSkill.prototype.drawItem = function(index) {
var item = this._data[index];
this.contents.fontSize = 20;
if (item) {
var rect = this.itemRect(index);
rect.width -= this.textPadding();
rect.width -= 40;
this.changePaintOpacity(this.isEnabled(item));
// Get Name
var name = DataManager.itemShortName(item);
this.contents.drawText(name, rect.x + 5, rect.y, rect.width, rect.height);
this.changePaintOpacity(1);
};
};
//=============================================================================
// * Refresh Arrows
//=============================================================================
Window_BattleSkill.prototype._refreshArrows = function() {
// Super Call
Window_SkillList.prototype._refreshArrows.call(this);
var w = this._width;
var h = this._height;
var p = 24;
var q = p/2;
this._downArrowSprite.move(w - q, (h - q) + 6);
this._upArrowSprite.move(w - q, q + 1);
};
//=============================================================================
// * Update Help
//=============================================================================
Window_BattleSkill.prototype.updateHelp = function() {
// Super Call
Window_SkillList.prototype.updateHelp.call(this);
if (this._backWindow) {
this._backWindow._actor = this._actor;
this._backWindow.setItem(this.item());
};
};
//=============================================================================
// ** AudioManager
//-----------------------------------------------------------------------------
// Adding a custom channel for Danger's BGS;
//
//=============================================================================
AudioManager._dangerBgs = null;
AudioManager._dangerBgsBuffer = null;
AudioManager.playDangerBgs = function(bgs, pos) {
if (!!AudioManager._dangerBgs && AudioManager._dangerBgs.name === bgs.name) {
this.updateDangerBgsParameters(bgs);
} else {
this.stopDangerBgs();
if (bgs.name) {
this._dangerBgsBuffer = this.createBuffer('bgs', bgs.name);
this.updateDangerBgsParameters(bgs);
this._dangerBgsBuffer.play(true, pos || 0);
}
}
this.updateDangersBgs(bgs, pos);
};
AudioManager.stopDangerBgs = function() {
if (this._dangerBgsBuffer) {
this._dangerBgsBuffer.stop();
this._dangerBgsBuffer = null;
this._dangerBgs = null;
}
};
AudioManager.updateDangerBgsParameters = function(bgs) {
this.updateBufferParameters(this._dangerBgsBuffer, this._bgsVolume, bgs);
};
AudioManager.updateDangersBgs = function(bgs, pos) {
this._dangerBgs = {
name: bgs.name,
volume: bgs.volume,
pitch: bgs.pitch,
pan: bgs.pan,
pos: pos
};
};
AudioManager.fadeOutDangerBgs = function(duration) {
if (this._dangerBgsBuffer && this._dangerBgs) {
this._dangerBgsBuffer.fadeOut(duration);
this._dangerBgs = null;
}
};
//=============================================================================
// ** Sprite_ScrollingText
//-----------------------------------------------------------------------------
// This sprite is used to display scrolling text in log type
// situations.
//=============================================================================
function Sprite_ScrollingText() { this.initialize.apply(this, arguments); }
Sprite_ScrollingText.prototype = Object.create(Sprite.prototype);
Sprite_ScrollingText.prototype.constructor = Sprite_ScrollingText;
//=============================================================================
// * Object Initilization
//=============================================================================
Sprite_ScrollingText.prototype.initialize = function() {
// Super Call
Sprite.prototype.initialize.call(this);
this.x = 14;
this.y = 10; //4 バトルメッセージのウィンドウと文字の隙間を空ける
this.width = 360 - 28;
this.height = 88 - 4;
this.bitmap = new Bitmap(this.width, this.height);
// Area Mask
this._areaMask = new PIXI.Graphics();
this._areaMask.beginFill(0xFFF);
this._areaMask.drawRect(0, 0, this.width, this.height);
this._areaMask.endFill()
this.mask = this._areaMask
this.addChild(this._areaMask);
// Create Line Sprites Container
this._lineSpritesContainer = new Sprite();
this.addChild(this._lineSpritesContainer);
// List of Sprites
this._list = [];
// Remove List
this._removeList = [];
// Create Window
this._window = new Window_ScrollingTextSource(this.width, this.height);
this._window.y = this.height;
this.addChild(this._window);
};
//=============================================================================
// * Clear
//=============================================================================
Sprite_ScrollingText.prototype.clear = function() {
for (var i = 0; i < this._list.length; i++) {
this._lineSpritesContainer.removeChild(this._list[i])
}
this._list = [];
};
//=============================================================================
// * Line Width
//=============================================================================
Sprite_ScrollingText.prototype.lineWidth = function() {
return this.width;
};
//=============================================================================
// * Add Line
//=============================================================================
Sprite_ScrollingText.prototype.addLine = function(text) {
// Get Last
var last = this._list[this._list.length - 1];
// Get Text Data
var textData = this._window.drawTextEx(text, 0, 0);
// Create Bitmap
var bitmap = new Bitmap(this.lineWidth(), textData.height + 6); // + 0  バトルメッセージの表示を3行に
// bitmap.fillAll('rgba(255, 0, 0, 0.5)')
// Transfer Window Contents
bitmap.blt(this._window.contents, 0, 0, bitmap.width, bitmap.height, 0, 0);
// Create Sprite
var sprite = new Sprite(bitmap);
sprite.y = last ? last.y + last.height : 0;
sprite.opacity = 0;
this._list.push(sprite)
this._lineSpritesContainer.addChild(sprite);
// Return Sprite
return sprite;
};
//=============================================================================
// * Frame Update
//=============================================================================
Sprite_ScrollingText.prototype.update = function() {
// Super Call
Sprite.prototype.update.call(this);
// Update Lines
this.updateLines();
};
//=============================================================================
// * Update Lines
//=============================================================================
Sprite_ScrollingText.prototype.updateLines = function() {
// If List is more than 0
if (this._list.length > 0) {
// Get First
var first = this._list[0];
// Get Last Sprite
var last = this._list[this._list.length - 1];
// Needs scrolling flag
var needsScrolling = first.y < 0 && first.y >= -first.height || last.y + last.height > this.height;
// If Needs scrolling
if (needsScrolling ) {
first.y = Math.max(first.y - 3, -first.height);
first.opacity -= 20;
};
// If first has reached removal position
if (first.y <= -first.height) {
// Get Sprite
var sprite = this._list.shift();
this._lineSpritesContainer.removeChild(sprite);
// Get Next Sprite
var next = this._list[0];
// If Next Sprite Exists set the Y to 0
if (next) { next.y = 0; };
};
var fadeInSpeed = 30;
if (first.y >= 0 && first.opacity < 255) { first.opacity += fadeInSpeed; };
for (var i = 1; i < this._list.length; i++) {
var sprite = this._list[i];
var prev = this._list[i-1];
sprite.y = (prev.y + prev.height)
if (sprite.opacity < 255 && (sprite.y > 0 && sprite.y <= this.height)) {
sprite.opacity += fadeInSpeed;
};
};
};
};
//=============================================================================
// ** Window_ScrollingTextSource
//-----------------------------------------------------------------------------
// This window displays the quest list header.
//=============================================================================
function Window_ScrollingTextSource() { this.initialize.apply(this, arguments); }
Window_ScrollingTextSource.prototype = Object.create(Window_Base.prototype);
Window_ScrollingTextSource.prototype.constructor = Window_ScrollingTextSource;
//=============================================================================
// * Initialize Object
//=============================================================================
Window_ScrollingTextSource.prototype.initialize = function(width, height) {
// Super Call
Window_Base.prototype.initialize.call(this, 0, 0, width, height);
};
//=============================================================================
// * Settings
//=============================================================================
Window_ScrollingTextSource.prototype.standardPadding = function() { return 0 };
Window_ScrollingTextSource.prototype.standardFontSize = function() { return LanguageManager.getMessageData("XX_BLUE.Window_ScrollingTextSource").standardFontSize; };
//=============================================================================
// * Clear Functions
//=============================================================================
Window_ScrollingTextSource.prototype._refreshBack = function() {};
Window_ScrollingTextSource.prototype._refreshFrame = function() { };
Window_ScrollingTextSource.prototype._refreshCursor = function() { };
Window_ScrollingTextSource.prototype._refreshArrows = function() { };
Window_ScrollingTextSource.prototype._refreshPauseSign = function() { };
Window_ScrollingTextSource.prototype._updateCursor = function() {
this._windowCursorSprite.visible = false;
};
Window_ScrollingTextSource.prototype._updateArrows = function() {
this._downArrowSprite.visible = false
this._upArrowSprite.visible = false
};
Window_ScrollingTextSource.prototype._updatePauseSign = function() {
var sprite = this._windowPauseSignSprite;
sprite.visible = false;
};
//=============================================================================
// * Calculate Text Height
//=============================================================================
Window_ScrollingTextSource.prototype.calcTextHeight = function(textState, all) {
return Window_Base.prototype.calcTextHeight.call(this, textState, all) - 5;
};
//=============================================================================
// * Draw Text Ex
//=============================================================================
Window_ScrollingTextSource.prototype.drawTextEx = function(text, x, y) {
// Clear Contents
this.contents.clear();
// Reset Bitmap Font Color
this.contents.bitmapFontColor = null;
if (text) {
var textState = { index: 0, x: x, y: y, left: x };
textState.text = this.convertEscapeCharacters(text);
textState.height = this.calcTextHeight(textState, false);
this.resetFontSettings();
while (textState.index < textState.text.length) {
this.processCharacter(textState);
}
return textState
} else {
return 0;
};
};
//=============================================================================
// * Process Draw Input Icon
//=============================================================================
Window_ScrollingTextSource.prototype.processDrawInputIcon = function(input, textState) {
// Get Key
var key = Input.inputKeyCode(input);
// Get Rect
var rect = this.contents.keyIconRects(key).up;
// Add Padding Space
textState.x += 4;
// Draw Key Icon
this.contents.drawAlginedKeyIcon(key, textState.x, textState.y + 5, rect.width, textState.height);
// Increase Texstate X position
textState.x += rect.width + 4;
};
//=============================================================================
// ** Window_BattleLog
//-----------------------------------------------------------------------------
// The window for displaying battle progress. No frame is displayed, but it is
// handled as a window for convenience.
//=============================================================================
// Alias Listing
//=============================================================================
_TDS_.OmoriBattleSystem.Window_BattleLog_initialize = Window_BattleLog.prototype.initialize;
_TDS_.OmoriBattleSystem.Window_BattleLog_clear = Window_BattleLog.prototype.clear;
_TDS_.OmoriBattleSystem.Window_BattleLog_addText = Window_BattleLog.prototype.addText;
_TDS_.OmoriBattleSystem.Window_BattleLog_isBusy = Window_BattleLog.prototype.isBusy;
_TDS_.OmoriBattleSystem.Window_BattleLog_update = Window_BattleLog.prototype.update;
_TDS_.OmoriBattleSystem.Window_BattleLog_updateWait = Window_BattleLog.prototype.updateWait;
_TDS_.OmoriBattleSystem.Window_BattleLog_showChainSkillList = Window_BattleLog.prototype.showChainSkillList;
_TDS_.OmoriBattleSystem.Window_BattleLog_hideChainSkillList = Window_BattleLog.prototype.hideChainSkillList;
_TDS_.OmoriBattleSystem.Window_BattleLog_updateChainkSkillInput = Window_BattleLog.prototype.updateChainkSkillInput
_TDS_.OmoriBattleSystem.Window_BattleLog_updateChainkSkillInput = Window_BattleLog.prototype.updateChainkSkillInput
_TDS_.OmoriBattleSystem.Window_BattleLog_performDamage = Window_BattleLog.prototype.performDamage;
//=============================================================================
// * Object Initialization
//=============================================================================
Window_BattleLog.prototype.initialize = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Window_BattleLog_initialize.call(this);
// Wait for Input Flag
this._waitingForInput = false;
// Set Initial Position
this.x = 140;
this.y = -4;
// Create Scrolling Text
this.createScrollTextSprite();
// Set Opacity
this.opacity = 255;
};
//=============================================================================
// * Settings
//=============================================================================
Window_BattleLog.prototype.windowWidth = function() { return 360; };
Window_BattleLog.prototype.windowHeight = function() { return 93 };
//=============================================================================
// * Clear Functions (Prevent usage)
//=============================================================================
Window_BattleLog.prototype.drawLineText = function() { };
Window_BattleLog.prototype.refresh = function() { };
//=============================================================================
// * Create Scroll Text Sprite
//=============================================================================
Window_BattleLog.prototype.createScrollTextSprite = function() {
// Create Scroll Text Sprite
this._scrollTextSprite = new Sprite_ScrollingText();
this.addChild(this._scrollTextSprite);
};
//=============================================================================
// * Clear
//=============================================================================
Window_BattleLog.prototype.clear = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Window_BattleLog_clear.call(this);
// Clear
this._scrollTextSprite.clear();
};
//=============================================================================
// * Add Text
//=============================================================================
Window_BattleLog.prototype.addText = function(text) {
// // If Scroll Text Sprite Exists Add it
if (this._scrollTextSprite) {
this._scrollTextSprite.addLine(text);
if (ConfigManager.battleLogSpeed === 1) {
if(BattleManager._phase !== "endBattle" && BattleManager._phase !== "victory") this.push('wait');
} else if (ConfigManager.battleLogSpeed === 2) {
let currentSkill = !!BattleManager._action && BattleManager._action._item ? BattleManager._action._item.object() : null;
let skillId = !!DataManager.isSkill(currentSkill) ? currentSkill.id : 0;
let ACS_SKILLS = [
46,47,48,49,50,51,52,53,54,55,56,57,59,60,61, // OMORI ACS, RELEASE ENERGY AND RELEASE STRESS
86,87,88,89,90,91,92,93,94,97,98,99,100,101, // AUBREY ACS
126,127,128,129,130,131,132,133,134,137,138,139, // KEL ACS
168,167,170,171,172,173,174,175,176,178,179,180 // HERO ACS
];
if(ACS_SKILLS.contains(skillId)) {
this.push("wait");
}
else if(BattleManager._phase === "endBattle" || BattleManager._phase === "victory") {
//this.push("wait");
}
else {
this.push('wait');
this.push('wait');
}
}
};
// Run Original Function
_TDS_.OmoriBattleSystem.Window_BattleLog_addText.call(this, text);
};
//=============================================================================
// * Add Instant Text
//=============================================================================
Window_BattleLog.prototype.addInstantText = function(text) {
// If Scroll Text Sprite Exists Add it
if (this._scrollTextSprite) {
// Add Sprite
var sprite = this._scrollTextSprite.addLine(text);
sprite.opacity = 255;
};
};
//=============================================================================
// * Play Sound Effect
//=============================================================================
Window_BattleLog.prototype.playSE = function(se) {
// Play Sound Effect
AudioManager.playSe(se);
};
//=============================================================================
// * Wait For Input
//=============================================================================
Window_BattleLog.prototype.waitForInput = function() { this._waitingForInput = true; };
//=============================================================================
// * Wait For Input
//=============================================================================
Window_BattleLog.prototype.waitFrames = function(frames) { this._waitCount = frames; };
//=============================================================================
// * Determine if busy
//=============================================================================
Window_BattleLog.prototype.isBusy = function() {
// Return Original Function
return _TDS_.OmoriBattleSystem.Window_BattleLog_isBusy.call(this) || this._waitingForInput;
};
//=============================================================================
// * Frame Update
//=============================================================================
Window_BattleLog.prototype.update = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Window_BattleLog_update.call(this);
// Update Scroll Text Sprite
this._scrollTextSprite.update();
};
//=============================================================================
// * Update Wait
//=============================================================================
Window_BattleLog.prototype.updateWait = function() {
// Return Original Function & Update Input Wait Check
return _TDS_.OmoriBattleSystem.Window_BattleLog_updateWait.call(this) || this.updateInputWait();
};
//=============================================================================
// * Update Input Wait
//=============================================================================
Window_BattleLog.prototype.updateInputWait = function() {
// If Waiting for Input and OK is pressed
if (this._waitingForInput && Input.isTriggered('ok')) {
// Set Waiting for Input flag to false
this._waitingForInput = false;
};
// console.log(this._waitingForInput )
// Return Waiting for Input State
return this._waitingForInput;
};
//=============================================================================
// * Show Chain Skill List
//=============================================================================
Window_BattleLog.prototype.showChainSkillList = function(subject, skill) {
// Disable Show Chain Skill
if ($gameSwitches.value(41)) { return; }
// Run Original Function
_TDS_.OmoriBattleSystem.Window_BattleLog_showChainSkillList.call(this, subject, skill);
if (subject === undefined) { return; }
if (!subject.isActor()) { return; }
if (!DataManager.isSkill(skill)) { return; }
// Get Chain Window
var chainWindow = BattleManager._activeChainSkillWindow;
// If Chain Window is more than 0
if (chainWindow._chainSkills.length > 0) {
// Show Actor Chain Skill Bubbles
BattleManager._statusWindow.showActorChainSkillBubbles(subject, chainWindow._chainSkills);
// Set Chain Window Y Position
chainWindow.y = Graphics.height;
};
};
//=============================================================================
// * Hide Chain Skill List
//=============================================================================
Window_BattleLog.prototype.hideChainSkillList = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Window_BattleLog_hideChainSkillList.call(this);
// Show Actor Chain Skill Bubbles
BattleManager._statusWindow.showActorChainSkillBubbles(null);
};
//=============================================================================
// * Update Chain Skill Input
//=============================================================================
Window_BattleLog.prototype.updateChainkSkillInput = function() {
// Get Chain Window
var chainWindow = BattleManager._activeChainSkillWindow;
// Get Last Input
var lastInput = chainWindow.chainInput;
// Run Original Function
_TDS_.OmoriBattleSystem.Window_BattleLog_updateChainkSkillInput.call(this);
// Get Chain Window
var chainWindow = BattleManager._activeChainSkillWindow;
// If Chain input is not null and last input is null
if (chainWindow.chainInput !== null && lastInput === null) {
// Get Subject
var subject = chainWindow._battler;
// Select Actor Chain Skill Bubble
BattleManager._statusWindow.selectActorChainSkillBubble(subject, chainWindow.chainInput);
}
};
//=============================================================================
// * Show Global Defeat Message
//=============================================================================
Window_BattleLog.prototype.showGlobalDefeatMessage = function() {
// Show Message
// $gameMessage.showLanguageMessage('xx_battle_text.message_1002')
};
//=============================================================================
// * Perform Damage
//=============================================================================
Window_BattleLog.prototype.performDamage = function(target) {
// Initialize Result
/*let result;
// If Target is enemy
if (target.isEnemy()) {
// Get Result
result = target.result();
// If result is not elementally weak or strong
if (!result.elementWeak && !result.elementStrong && SceneManager.currentWorldIndex() !== 3) {
// Set result to null
result = null;
};
};
// If result has not been remove block enemy sound
if (result) { SoundManager._blockEnemySound = true; };
console.log(result);
console.log('ALERT ELEMENT!!!!!!!')
// Run Original Function
_TDS_.OmoriBattleSystem.Window_BattleLog_performDamage.call(this, target);
// If result exists
if (result) {
console.log("Is strong: " + result.elementStrong, "Is weak: " + result.elementWeak);
// If Element strong
if (result.elementStrong) {
// Play Elemental Damage sound
AudioManager.playSe({ name: "se_impact_double", volume: ConfigManager.seVolume, pitch: 100, pan: 0});
} else if (result.elementWeak) {
// Play Elemental Damage sound
AudioManager.playSe({ name: "se_impact_soft", volume: ConfigManager.seVolume, pitch: 100, pan: 0});
};
}
// Unblock sound
SoundManager._blockEnemySound = false;*/
return _TDS_.OmoriBattleSystem.Window_BattleLog_performDamage.call(this, target);
};
//=============================================================================
// ** Sprite_EnemyBattlerStatus
//-----------------------------------------------------------------------------
// This sprite is used to display the status of the enemy in battle.
//=============================================================================
function Sprite_EnemyBattlerStatus() { this.initialize.apply(this, arguments); }
Sprite_EnemyBattlerStatus.prototype = Object.create(Sprite.prototype);
Sprite_EnemyBattlerStatus.prototype.constructor = Sprite_EnemyBattlerStatus;
//=============================================================================
// * Object Initilization
//=============================================================================
Sprite_EnemyBattlerStatus.prototype.initialize = function() {
// Super Call
Sprite.prototype.initialize.call(this);
// Create Bitmap
this.bitmap = new Bitmap(1, 1);
// Create Cursor Sprite
this.createCursorSprite();
};
//=============================================================================
// * Create Cursor Sprite
//=============================================================================
Sprite_EnemyBattlerStatus.prototype.createCursorSprite = function() {
// Get Bitmap
var bitmap = ImageManager.loadSystem('ACSArrows');
// Create Cursor Sprite
this._cursorSprite = new Sprite(bitmap);
this._cursorSprite.setFrame(0, 0, bitmap.width / 4, bitmap.height);
this.addChild(this._cursorSprite);
// Set Cursor Position
this.setCursorPosition(0);
};
//=============================================================================
// * Minimun Width
//=============================================================================
Sprite_EnemyBattlerStatus.prototype.minWidth = function() { return 120 };
//=============================================================================
// * Refresh Bitmap
//=============================================================================
Sprite_EnemyBattlerStatus.prototype.refreshBitmap = function(battler) {
// If Battler Exists
if (battler) {
// Set Font Size
this.bitmap.fontSize = 17; //24 敵の名前を小さくする 中央過程のフォントサイズ
// this.bitmap.updateBitmapFont();
// Get Battler Name
var name = battler.name();
// Get NameWidth
var nameWidth = this.bitmap.measureTextWidth(name, true);
// Recreate Bitmap
this.bitmap = new Bitmap(Math.max(this.minWidth(), nameWidth + 20), 57);
this.bitmap.fontSize = 17; //24 敵の名前を小さくする 実際の描きのフォントサイズ、上と同じ
this.bitmap.fillAll('rgba(255, 0, 0, 1)')
// Get Back Bitmap
var backBitmap = ImageManager.loadSystem('enemy_box');
// Make Background
this.bitmap.blt(backBitmap, 0, 0, 7, backBitmap.height, 0, 0);
this.bitmap.blt(backBitmap, 7, 0, 1, backBitmap.height, 7, 0, this.width - 14);
this.bitmap.blt(backBitmap, 8, 0, 7, backBitmap.height, this.width - 7, 0);
// Draw Name
this.bitmap.drawText(name, 4, 4, this.width -8, 27, 'center'); // 0, 0, 0Y座標+2、枠の幅-8、従ってX座標+4
var bar = ImageManager.loadSystem('enemy_box_gradients')
var icon = ImageManager.loadSystem('hp_icon');
var sx = (this.width - (bar.width + icon.width)) / 2
var barHeight = bar.height / 2;
this.bitmap.blt(icon, 0, 0, icon.width, icon.height, sx, this.height - (icon.height + 7));
sx += icon.width;
this.bitmap.blt(bar, 0, barHeight, bar.width, barHeight, sx, this.height - (barHeight + 9))
this.bitmap.blt(bar, 0, 0, battler.hpRate() * bar.width, barHeight, sx, this.height - (barHeight + 9))
// If Scanned
if (battler.isScanned()) {
// Draw HP
this.bitmap.drawText(`${battler.hp}/${battler.mhp}`, sx, this.height - 29, bar.width - 3, 20, 'right');
}
// Refresh Cursor
this.setCursorPosition(battler.battleStatusCursorPosition());
};
};
//=============================================================================
// * Refresh Cursor
//=============================================================================
Sprite_EnemyBattlerStatus.prototype.setCursorPosition = function(position = 0) {
// X Position
var x = 0
// Get Width
var width = this._cursorSprite.width;
// Switch Case Position
switch (position) {
case 0: // Top
x = 3 * this._cursorSprite.width;
this._cursorSprite.x = (this.width - width) / 2
this._cursorSprite.y = -this._cursorSprite.height + 4;
break;
case 1: // Left
x = 2 * this._cursorSprite.width;
this._cursorSprite.x = -this._cursorSprite.width + 4;
this._cursorSprite.y = (this.height - this._cursorSprite.height) / 2;
break;
case 2: // Right
x = 1 * this._cursorSprite.width;
this._cursorSprite.x = this.width - 5
this._cursorSprite.y = (this.height - this._cursorSprite.height) / 2;
break;
case 3: // Bottom
x = 0 * this._cursorSprite.width;
this._cursorSprite.x = (this.width - width) / 2
this._cursorSprite.y = this.height - 4;
break;
}
// Set Cursor Frame X Position
this._cursorSprite._frame.x = x;
this._cursorSprite._refresh();
};
//=============================================================================
// ** Sprite_Enemy
//-----------------------------------------------------------------------------
// The sprite for displaying an enemy.
//=============================================================================
// Alias Listing
//=============================================================================
_TDS_.OmoriBattleSystem.Sprite_Enemy_initMembers = Sprite_Enemy.prototype.initMembers;
_TDS_.OmoriBattleSystem.Sprite_Enemy_setBattler = Sprite_Enemy.prototype.setBattler;
_TDS_.OmoriBattleSystem.Sprite_Enemy_update = Sprite_Enemy.prototype.update;
_TDS_.OmoriBattleSystem.Sprite_Enemy_updateCollapse = Sprite_Enemy.prototype.updateCollapse;
//=============================================================================
// * Initialize Members
//=============================================================================
Sprite_Enemy.prototype.initMembers = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Sprite_Enemy_initMembers.call(this);
// Create Status Sprite
this.createStatusSprite();
// Set Fall on death flag to false
this._fallOnDeath = false;
// Locked Pattern
this._fallLockedPattern = null;
};
//=============================================================================
// * Set Battler
// =============================================================================
Sprite_Enemy.prototype.setBattler = function(battler) {
// Run Original Function
_TDS_.OmoriBattleSystem.Sprite_Enemy_setBattler.call(this, battler);
// If Enemy Exists
if (this._enemy) {
// Set Fall On Death flag
this._fallOnDeath = this._enemy.enemy().meta.FallOnDeath;
} else {
// Set Fall on Death to false
this._fallOnDeath = false;
}
// Locked Pattern
this._fallLockedPattern = null;
};
//=============================================================================
// * Update Collapse
// =============================================================================
Sprite_Enemy.prototype.updateCollapse = function() {
if (this._fallOnDeath) {
// If Fall Lock Pattern is not null
if (this._fallLockedPattern !== null) {
// Set Pattern
this._pattern = this._fallLockedPattern;
};
// If On last frame of motion
if (this._pattern >= this.motionFrames() - 2 || this._fallLockedPattern !== null) {
// Get Target Y
var targetY = Graphics.height + this._mainSprite.height;
// Move Position
this._offsetY += Math.abs(targetY - this._homeY) / 32;
// If fall locked pattern is null
if (this._fallLockedPattern === null) {
// Set Fall Locked Pattern
this._fallLockedPattern = this._pattern;
};
} else {
// Reset Duration to 0
this._effectDuration = 32;
};
} else {
// Run Original Function
_TDS_.OmoriBattleSystem.Sprite_Enemy_updateCollapse.call(this);
};
};
//=============================================================================
// * Frame Update
//=============================================================================
Sprite_Enemy.prototype.update = function() {
// Run Original Function
_TDS_.OmoriBattleSystem.Sprite_Enemy_update.call(this);
// Update Status Sprite
this.updateStatusSprite();
// if (Input.isTriggered('control')) {
// // this._fallOnDeath = true;
// this._enemy.setHp(0)
// // this.startCollapse()
// }
};
//=============================================================================
// * Create Status Sprite
//=============================================================================
Sprite_Enemy.prototype.createStatusSprite = function() {
// Set Status Sprite
this._statusSprite = new Sprite_EnemyBattlerStatus();
//this.parent.addChild(this._statusSprite);
// Status Shift Positions
this._statusSprite.z = 2;
this._statusShiftPositions = [[-1, -1], [0, -1], [1, -1], [-1, 0], [0, 0], [1, 0], [-1, 1], [0, 1], [1, 1]]
};
//=============================================================================
// * Update Status Sprite
//=============================================================================
Sprite_Enemy.prototype.updateStatusSpritePosition = function() {
// Set Initial Center Position
this._statusSprite.x = -(this._statusSprite.width / 2)
this._statusSprite.y = -((this.height + this._statusSprite.height) / 2);
// Get Position
var position = this._enemy.battleStatusPosition();
// Shift Status Sprite Position
this.shiftStatusSpritePosition(...this._statusShiftPositions[position])
// Adjust by offsets
this._statusSprite.x += this._enemy.battleStatusXOffset();
this._statusSprite.y += this._enemy.battleStatusYOffset();
// Get Last Index
var lastIndex = this.children.length-1;
// If Index of status sprite is less than last index
/*if (this.children.indexOf(this._statusSprite) < lastIndex ) {
this.addChildAt(this._statusSprite, lastIndex);
};*/
let globalPosition = this.toGlobal(this._statusSprite);
this._statusSprite.position.set(globalPosition.x, globalPosition.y);
if(!!this.parent) {
if(!this._statusSprite.parent) {
this.parent.parent.parent.parent.addChild(this._statusSprite)
if(!!this._enemy.enemy().meta["sprite mirrored"]) {this._statusSprite.scale.x = -1;}
}
}
};
//=============================================================================
// * Shift Status Sprite Position
//=============================================================================
Sprite_Enemy.prototype.shiftStatusSpritePosition = function(x, y) {
// X Coordinate Shift
switch (x) {
case -1: // Left
this._statusSprite.x -= (this.width / 2);
break;
case 1: // Right
this._statusSprite.x += (this.width / 2);
break;
};
// Y Coordinate Shift
switch (y) {
case -1: // Top
this._statusSprite.y -= (this.height / 2);
break;
case 1: // Bottom
this._statusSprite.y += (this.height / 2);
break;
};
};
//=============================================================================
// * Update Status Sprite
//=============================================================================
Sprite_Enemy.prototype.updateStatusSprite = function() {
// If Enemy
if (this._enemy) {
// Get Selected State
var selected = this._enemy.isSelected()
// If Selected and status sprite is not visible
if (selected && !this._statusSprite.visible) {
// Refresh Status Sprite
this._statusSprite.refreshBitmap(this._enemy);
// Update Status Sprite Position
this.updateStatusSpritePosition();
}
// Set Visibility
this._statusSprite.visible = selected;
};
};
//=============================================================================
// * Damage Offset X
//=============================================================================
Sprite_Enemy.prototype.damageOffsetX = function() { return this._enemy ? this._enemy.battleDamageXOffset(): 0; };
//=============================================================================
// * Damage Offset Y
//=============================================================================
Sprite_Enemy.prototype.damageOffsetY = function() { return this._enemy ? this._enemy.battleDamageYOffset(): -8; };
//=============================================================================
// ** Sprite_Damage
//-----------------------------------------------------------------------------
// The sprite for displaying a popup damage.
//=============================================================================
// Alias Listing
//=============================================================================
_TDS_.OmoriBattleSystem.Sprite_Damage_setup = Sprite_Damage.prototype.setup;
//=============================================================================
// * Setup
//=============================================================================
Sprite_Damage.prototype.setup = function(target) {
// // Set Duration
// this._duration = 40;
// Run Original Function
_TDS_.OmoriBattleSystem.Sprite_Damage_setup.call(this, target);
};
//=============================================================================
// * Digit Height
//=============================================================================
Sprite_Damage.prototype.digitHeight = function() {
return this._damageBitmap ? this._damageBitmap.height / 7 : 0;
};
//=============================================================================
// * Create Miss
//=============================================================================
Sprite_Damage.prototype.createMiss = function() {
var w = this.digitWidth();
var h = this.digitHeight();
var sprite = this.createChildSprite();
sprite.setFrame(0, 4 * h, 48, h);
};
//=============================================================================
// * Create Miss
//=============================================================================
Sprite_Damage.prototype.createImmune = function() {
var w = this.digitWidth();
var h = this.digitHeight();
var sprite = this.createChildSprite();
sprite.setFrame(0, 5 * h, 82, h);
};
//=============================================================================
// * Create Digits
//=============================================================================
Sprite_Damage.prototype.createDigits = function(baseRow, value) {
var string = Math.abs(value).toString();
var row = baseRow + (value < 0 ? 1 : 0);
var w = this.digitWidth();
var h = this.digitHeight();
for (var i = 0; i < string.length; i++) {
var sprite = this.createChildSprite();
var n = Number(string[i]);
sprite.setFrame(n * w, row * h, w, h);
sprite.x = (i - (string.length - 1) / 2) * (w - 8);
}
};
//=============================================================================
// * Create Child Sprite
//=============================================================================
Sprite_Damage.prototype.createChildSprite = function() {
var sprite = new Sprite();
sprite.bitmap = this._damageBitmap;
sprite.anchor.set(0.5, 1);
sprite.y = -50;
sprite.opacity = 0;
this.addChild(sprite);
return sprite;
};
//=============================================================================
// * Frame Update
//=============================================================================
Sprite_Damage.prototype.update = function() {
// Super Call
Sprite.prototype.update.call(this);
// If Duration is more than 0
if (this._duration > 0) {
// Previously Done Flag
var prevDone = true;
for (var i = 0; i < this.children.length; i++) {
// Get Sprite
var sprite = this.children[i];
// If Previous is done update child
if (prevDone) { this.updateChild(sprite); };
// Set Previous done flag
prevDone = (sprite.y >= -20);
};
// If Previous is done decrease duration
if (prevDone) { this._duration--; };
}
this.updateFlash();
this.updateOpacity();
if (!BattleManager._showDamage) {
this.opacity = 0;
}
};
//=============================================================================
// * Update Child
//=============================================================================
Sprite_Damage.prototype.updateChild = function(sprite) {
// Move Sprite
sprite.y = Math.min(sprite.y + 6, 0);
// Increase Opacity of Sprite
if (this._duration > 10) { sprite.opacity += 20};
// Set Sprite Blend Color
sprite.setBlendColor(this._flashColor);
};
//=============================================================================
// ** Sprite_ACSBubble
//-----------------------------------------------------------------------------
// This sprite is used to display ACS Bubbles
//=============================================================================
function Sprite_ACSBubble() { this.initialize.apply(this, arguments); }
Sprite_ACSBubble.prototype = Object.create(Sprite.prototype);
Sprite_ACSBubble.prototype.constructor = Sprite_ACSBubble;
//=============================================================================
// * Object Initilization
//=============================================================================
Sprite_ACSBubble.prototype.initialize = function(actorIndex) {
// Super Call
Sprite.prototype.initialize.call(this);
// Active Flag
this._active = true;
// Set Actor Index
this._actorIndex = actorIndex;
// Bubble Index
this._bubbleIndex = 0;
// Target Opacity
this._targetOpacity = 0;
// Opacity Duration
this._opacityDuration = 0;
// Arrow Direction
this._arrowDirection = 2;
// Arrow Move Direction (0: up/down, 1: Left/Right)
this._arrowMoveDirection = 0;
this._arrowPositions = {2: [0, 0], 4: [0, 0], 6: [0, 0], 8: [0, 0]};
// Shake Flag
this._shake = false;
this.createArrowSprite();
this.setBubbleIndex(0);
this.updatePosition(0);
};
//=============================================================================
// * Activate & Deactivate
//=============================================================================
Sprite_ACSBubble.prototype.activate = function() { this._active = true; this.show() };
Sprite_ACSBubble.prototype.deactivate = function() { this._active = false; this.fadeOpacity(180, 10) };
//=============================================================================
// * Create Arrow Sprite
//=============================================================================
Sprite_ACSBubble.prototype.createArrowSprite = function() {
this._arrowSprite = new Sprite(ImageManager.loadSystem('ACSArrows'));
this._arrowSprite.anchor.set(0.5, 0.5);
this.addChild(this._arrowSprite);
this.setArrowDirection(this._arrowDirection);
};
//=============================================================================
// * Set Arrow Direction
//=============================================================================
Sprite_ACSBubble.prototype.setArrowDirection = function(direction) {
// Arrow Direction
this._arrowDirection = direction;
// Get Bitmap
var bitmap = ImageManager.loadSystem('ACSArrows');
// Get Width
var width = bitmap.width / 4;
// Reset anchor
this._arrowSprite.anchor.set(0.5, 0.5);
// Direction Switch
switch (direction) {
case 'down':
case 2: // Down
this._arrowSprite.setFrame(0, 0, width, bitmap.height);
this._arrowMoveDirection = 0;
direction = 2;
break;
case'left':
case 4: // Left
this._arrowSprite.setFrame(2 * width, 0, width, bitmap.height);
this._arrowMoveDirection = 1;
direction = 4;
break;
case 'right':
case 6: // Right
this._arrowSprite.setFrame(1 * width, 0, width, bitmap.height);
this._arrowMoveDirection = 1;
direction = 6;
break;
case 'up':
case 8: // Up
this._arrowSprite.setFrame(3 * width, 0, width, bitmap.height);
this._arrowMoveDirection = 0;
direction = 8;
break;
};
// Get Position
var position = this._arrowPositions[direction];
// If Position Exists
if (position) {
// Set Arrow Sprite Position
this._arrowSprite.x = position[0];
this._arrowSprite.y = position[1];
};
};
//=============================================================================
// * Set Bubble Index
//=============================================================================
Sprite_ACSBubble.prototype.setBubbleIndex = function(index) {
// Get Bitmap
var bitmap = ImageManager.loadSystem('ACS_Bubble');
// Get Width & Height
var width = bitmap.width / 7, height = bitmap.height / 2;
// Set Bitmap
this.bitmap = bitmap;
var x = (index % 7) * width
var y = Math.floor(index / 7) * height;
this.setFrame(x, y, width, height);
// Set Bubble Index
this._bubbleIndex = index;
// Index Arrow Positions
if ([0, 1, 2, 3].contains(index)) {
// Set Arrow Positions
this._arrowPositions = {2: [70, 85], 4: [15, 45], 6: [120, 45], 8: [70, 10]};
} else if ([4, 5, 6].contains(index)) {
// Set Arrow Positions
this._arrowPositions = {2: [65, 95], 4: [5, 55], 6: [125, 55], 8: [65, 10]};
} else if ([7, 8, 9].contains(index)) {
// Set Arrow Positions
this._arrowPositions = {2: [60, 85], 4: [5, 45], 6: [115, 45], 8: [60, 5]};
} else if ([10, 11, 12].contains(index)) {
// Set Arrow Positions
this._arrowPositions = {2: [60, 90], 4: [5, 50], 6: [115, 50], 8: [60, 15]};
};
// Set Arrow Position
this.setArrowDirection(this._arrowDirection);
};
//=============================================================================
// * Update Position
//=============================================================================
Sprite_ACSBubble.prototype.updatePosition = function(position) {
// // Set Position
// this.x = 0; this.y = 0;
// return;
switch (this._actorIndex) {
case 0: // AUBREY
switch (position) {
case 0: this.x = 110; this.y = 45 ;break;
case 1: this.x = 90; this.y = 110 ;break;
case 2: this.x = 5; this.y = 140 ;break;
}
break;
case 1: // HERO
switch (position) {
case 0: this.x = -115; this.y = 45 ;break;
case 1: this.x = -105; this.y = 110 ;break;
case 2: this.x = -15; this.y = 140 ;break;
}
break;
case 2: // OMORI
switch (position) {
case 0: this.x = 5; this.y = -80 ;break;
case 1: this.x = 95; this.y = -55 ;break;
case 2: this.x = 110; this.y = 10 ;break;
}
break;
case 3: // KEL
switch (position) {
case 0: this.x = -5; this.y = -70 ;break;
case 1: this.x = -95; this.y = -55 ;break;
case 2: this.x = -105; this.y = 10 ;break;
}
break;
default:
// Set Position
this.x = 0; this.y = 0;
break;
};
};
//=============================================================================
// * Fade Opacity
//=============================================================================
Sprite_ACSBubble.prototype.fadeOpacity = function(opacity, duration) {
// Target Opacity
this._targetOpacity = opacity;
// Opacity Duration
this._opacityDuration = duration;
};
//=============================================================================
// * Show
//=============================================================================
Sprite_ACSBubble.prototype.show = function(duration = 15) {
this.fadeOpacity(255, duration);
};
//=============================================================================
// * Hide
//=============================================================================
Sprite_ACSBubble.prototype.hide = function(duration = 15) {
this.fadeOpacity(0, duration)
};
//=============================================================================
// * Start Shake
//=============================================================================
Sprite_ACSBubble.prototype.startShake = function() {
// Set Shake Flag to true
this._shake = true;
};
//=============================================================================
// * Stop Shake
//=============================================================================
Sprite_ACSBubble.prototype.stopShake = function() {
// Set Shake Flag to true
this._shake = false;
// Reset Anchor
this.anchor.set(0, 0);
// Reset Blend Color
this.setBlendColor([0, 0, 0, 0]);
};
//=============================================================================
// * Frame Update
//=============================================================================
Sprite_ACSBubble.prototype.update = function() {
// Super Call
Sprite.prototype.update.call(this);
// Update Arrow Direction
this.updateArrowDirection();
// Update Opcity
this.updateOpacity();
// Update Shake
this.updateShake();
};
//=============================================================================
// * Update Arrow Direction
//=============================================================================
Sprite_ACSBubble.prototype.updateArrowDirection = function() {
// If Active
if (this._active) {
// If Arrow Direction is 0
if (this._arrowMoveDirection === 0) {
this._arrowSprite.anchor.y = 0.5 + (Math.sin(Graphics.frameCount * 0.13) * 0.15);
} else {
this._arrowSprite.anchor.x = 0.5 + (Math.sin(Graphics.frameCount * 0.13) * 0.15);
};
};
};
//=============================================================================
// * Update Opacity
//=============================================================================
Sprite_ACSBubble.prototype.updateOpacity = function() {
// If Opacity duration is more than 0
if (this._opacityDuration > 0) {
var d = this._opacityDuration;
this.opacity = (this.opacity * (d - 1) + this._targetOpacity) / d;
this._opacityDuration--;
};
// If Active
if (this._active) {
this._arrowSprite.setColorTone([0, 0, 0, 0]);
} else {
this._arrowSprite.setColorTone([-80, -80, -80, 255]);
return;
};
};
//=============================================================================
// * Update Shake
//=============================================================================
Sprite_ACSBubble.prototype.updateShake = function() {
// If Shake is true
if (this._shake) {
// Get Shake Power
var power = 0.01
if (Math.random() >= 0.5) {
this.anchor.x = power;
} else {
this.anchor.x = -power;
};
if (Math.random() >= 0.5) {
this.anchor.y = power;
} else {
this.anchor.y = -power;
};
var alpha = 64 + (Math.sin(Graphics.frameCount * 0.3) * 64);
this.setBlendColor([255, 0, 0, alpha]);
};
};
//=============================================================================
// ** Sprite_BattleLowHpOverlay
//-----------------------------------------------------------------------------
// This sprite is used to display the status of the enemy in battle.
//=============================================================================
function Sprite_BattleLowHpOverlay() { this.initialize.apply(this, arguments); }
Sprite_BattleLowHpOverlay.prototype = Object.create(Sprite.prototype);
Sprite_BattleLowHpOverlay.prototype.constructor = Sprite_BattleLowHpOverlay;
//=============================================================================
// * Object Initilization
//=============================================================================
Sprite_BattleLowHpOverlay.prototype.initialize = function() {
// Super Call
Sprite.prototype.initialize.call(this);
// Set Bitmap
this.bitmap = ImageManager.loadPicture('battle_lowhealth');
// Get Actor
this._actor = $gameParty.getOmori();
// Set Opacity
this.opacity = 102;
// Opacity Chage Values
this._opacityChange = 0;
this._opacitySpeed = 5;
this._opacitySide = 0;
this._activeOpacity = -60;
this._oldHp = null;
// this._activeOpacity = 255;
// Hidden Flag
this._hidden = false;
// Set Beep Counter
this._beepCounter = 0;
// Set Danger Rate
this._dangerRate = 0;
// Set HP Rate
this._hpRate = 1;
// Set Original BGM
this._originalBGM = AudioManager.makeEmptyAudioObject();
// AudioManager.saveBgm
// this.setBlendColor([255, 0, 255, 255])
};
//=============================================================================
// * Frame Update
//=============================================================================
Sprite_BattleLowHpOverlay.prototype.update = function() {
// Super Call
Sprite.prototype.update.call(this);
if (BattleManager._showLowHpOverlay == false) {
this._hidden = true;
this.opacity = 0;
return;
};
if (BattleManager._hideLowHpOverlay) {
if (this.opacity > 0) {
this.opacity -= 10;
}
return;
}
// Set Visibility
this.visible = !$gameSwitches.value(93);
// If Actor Exists
if (this._actor) {
// If Actor HP does not match old HP
if (this._actor.hp !== this._oldHp) {
// If BGM has changed
if (!AudioManager.isCurrentBgm(this._originalBGM)) {
// Save BGM
this._originalBGM = AudioManager.saveBgm();
};
// Get low HP Rate (20%)
var lowHpRate = 0.2;
// Get HP Rate
this._hpRate = this._actor.hpRate();
var dangerMax = this._actor.mhp * lowHpRate;
this._dangerRate = this._actor.hp / dangerMax;
// Update Old HP
this._oldHp = this._actor.hp;
// Set Hidden State
this._hidden = (this._hpRate > lowHpRate);
// Reset Opacity Speed
this._opacitySpeed = 0;
// Get Original Volume
var originalVolume = this._originalBGM.volume;
// Set Volume
var volume = originalVolume;
// If Not hidden
if (!this._hidden) {
// Set Opacity Speed
this._opacitySpeed = 4 + (5 - (5 * this._dangerRate));
// If Actor HP is 0
if (this._actor.hp === 0) {
// Set Volume to 0
volume = 0;
// Play Low HP Background Sound
AudioManager.playDangerBgs({name: '[sfx]battle_flatline', volume: 0, pitch: 100 })
} else {
// Play Low HP Background Sound
AudioManager.playDangerBgs({name: 'boss_something_heartbeat', volume: 40, pitch: 100 + (50 - (50 * this._dangerRate)) })
// Set Volume
// volume = originalVolume * (this._hpRate <= 0.05 ? 0.05 : this._dangerRate);
volume = 50;
}
} else {
// Fadeout Background sound
AudioManager.fadeOutDangerBgs(1);
};
// Get Current BGM
var bgm = AudioManager._currentBgm;
// If BGM
if (bgm) {
// Set BGM Volume
//bgm.volume = volume;
// Update BGM Parameters
//AudioManager.updateBgmParameters(bgm);
};
};
};
// Update Opacity Changes
if (this._hidden && this._activeOpacity > -60) {
this._activeOpacity = Math.max(this._activeOpacity - 5, -60);
} else if (!this._hidden && this._activeOpacity < 80) {
this._activeOpacity = Math.min(this._activeOpacity + 5, 80);
};
// If Opacity side is 0
if (this._opacitySide === 0) {
var max = 60;
this._opacityChange = Math.min(this._opacityChange + this._opacitySpeed, max);
if (this._opacityChange === max) { this._opacitySide = 1; };
// console.log(this._opacityChange)
} else {
var min = -60;
this._opacityChange = Math.max(this._opacityChange - this._opacitySpeed, min);
if (this._opacityChange === min) { this._opacitySide = 0; };
}
// Set Opacity
this.opacity = this._activeOpacity + this._opacityChange;
if (!this._hidden && this._actor.hp > 0 && this._hpRate <= 0.1) {
// Decrease Beep Counter
this._beepCounter--;
// If Beep Counter is 0 or less
if (this._beepCounter <= 0) {
// Play Low HP Background Sound
// AudioManager.playSe({name: '[sfx]battle_ekg_beep', volume: 100, pitch: 100 + (30 - (30 * this._dangerRate)) })
AudioManager.playSe({name: '[sfx]battle_ekg_beep', volume: 50, pitch: 100 })
this._beepCounter = 100 - (20 - (20 * this._dangerRate));
};
};
// if (Input.isTriggered('shift')) {
// this._actor.setHp(6)
// // this._hidden = !this._hidden;
// };
// if (Input.isRepeated('left')) {
// this._actor.setHp(this._actor.hp - 1);
// }
// if (Input.isRepeated('right')) {
// this._actor.setHp(this._actor.hp + 1);
// }
};
//=============================================================================
// ** Sprite_BattleIntroContainer
//-----------------------------------------------------------------------------
// This sprite is used to display battle introductions.
//=============================================================================
function Sprite_BattleIntroContainer() { this.initialize.apply(this, arguments); }
Sprite_BattleIntroContainer.prototype = Object.create(Sprite.prototype);
Sprite_BattleIntroContainer.prototype.constructor = Sprite_BattleIntroContainer;
//=============================================================================
// * Object Initilization
//=============================================================================
Sprite_BattleIntroContainer.prototype.initialize = function(type) {
// Super Call
Sprite.prototype.initialize.call(this);
// Set Type
this._type = type;
// If type exists
if (type) {
// Type Switch Case
switch (type.toLowerCase()) {
case 'finalbattle': this.setupFinalBattleAnimation(); break;
};
};
};
//=============================================================================
// * Setup Animation: Final Battle
//=============================================================================
Sprite_BattleIntroContainer.prototype.setupFinalBattleAnimation = function() {
let bitmap = ImageManager.loadPicture('omori_prebattle');
// Create Animation Sprite
SceneManager._scene.hideAllMenuElements(1);
this._animationSprite = new Sprite();
this.addChild(this._animationSprite);
// Get Battler Sprite
this._battlerSprite = SceneManager._scene._spriteset._enemySprites[0];
this._battlerSprite._battler.hide();
this._battlerSprite.visible = false;
this._smallDelay = 15;
bitmap.addLoadListener(() => {
this._animationSprite.bitmap = bitmap;
// Get Width & Height
const width = bitmap.width / 6;
const height = bitmap.height / 4;
this._animationSprite.setFrame(0, 0, width, height);
this._animationSprite.x = 67;
this._animationSprite.y = Graphics.height - height;
// Initialize Animation Data
this._animationData = {index: 0, frames: 21, count: 10, delay: 10, };
})
};
//=============================================================================
// * Frame Update
//=============================================================================
Sprite_BattleIntroContainer.prototype.update = function() {
// Super Call
Sprite.prototype.update.call(this);
// If type exists
if (this._type) {
// Type Switch Case
switch (this._type.toLowerCase()) {
case 'finalbattle': this.updateFinalBattleAnimation();break;
};
};
};
//=============================================================================
// * Update Final Battle Animation
//=============================================================================
Sprite_BattleIntroContainer.prototype.updateFinalBattleAnimation = function() {
// Get Animation Data
if(!this._animationSprite || !this._animationSprite.bitmap) {return;}
let scene = SceneManager._scene;
if(!scene._gpWhite) {return;}
if(this._smallDelay > 0) {return this._smallDelay--;}
if(!!scene._gpWhite.parent) {
if(scene._gpWhite.alpha > 0) {return scene._gpWhite.alpha -= 0.05;}
else {
$gameScreen.startTint([0,0,0,0], 1); // Makes tint Equal to 0;
scene.removeChild(scene._gpWhite);
}
}
let anim = this._animationData;
// Decrease Animation Count
anim.count--;
// If animation count is 0 or less
if (anim.count <= 0) {
// Set Animation Count
anim.count = anim.delay;
// If Animation Index is less than animation frames
if (anim.index < anim.frames) {
// Increase Animation Index
anim.index++;
} else {
this.visible = false;
this.parent.removeChild(this);
if(!this._battlerSprite._appeared) {
this._battlerSprite._battler.appear();
this._battlerSprite._effectDuration = 0;
this._battlerSprite._appeared = true;
this._battlerSprite.opacity = 255;
}
// Clear Battle Intro
BattleManager.setBattleIntro(null);
// show All menu elements
SceneManager._scene.showAllMenuElements(30);
};
// Get Width & Height
let width = this._animationSprite.width;
let height = this._animationSprite.height;
// Set Animation Sprite Frame
this._animationSprite.setFrame((anim.index % 6) * width, Math.floor(anim.index / 6) * height, width, height);
};
};