OMORI_Android/www.br/js/plugins/Omori Battle System.js
2024-05-26 04:07:13 +03:00

5432 lines
204 KiB
JavaScript

//=============================================================================
// 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);
// }
// };
const FEMALE_STATE_LIST_OFFSET = 13;
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('wait');
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('wait');
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('wait');
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._logWindow.push('wait');
}, 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('wait');
this._logWindow.push('waitForInput');
data.skills.forEach(function(skill) {
this._logWindow.push('addText', TextManager.obtainSkill.format(skill.name));
this._logWindow.push('wait');
}, 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;
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.drawText(value.clamp(0, 10).padZero(2), 0, -4, 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 = 16;
var y = 112
this.contents.clearRect(0, y + 10, 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');
this.resetFontSettings();
};
//=============================================================================
// * Draw HP
//=============================================================================
Window_OmoriBattleActorStatus.prototype.drawMP = function(mp, maxMP) {
this.contents.fontSize = 16;
var y = 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');
this.resetFontSettings()
};
//=============================================================================
// * 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(`QUANTIDADE: x${$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('CUSTO:', 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 = 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 = 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 + 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 = 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, -4);
// Create Bitmap
var bitmap = new Bitmap(this.lineWidth(), textData.height);
// 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 24; };
//=============================================================================
// * 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) {
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 = 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 = 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, 0, 0, this.width, 27, 'center');
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);
};
};