//============================================================================= // TDS Map QTE's // Version: 1.5 //============================================================================= // Add to Imported List var Imported = Imported || {} ; Imported.TDS_MapQTE = true; // Initialize Alias Object var _TDS_ = _TDS_ || {} ; _TDS_.MapQTE = _TDS_.MapQTE || {}; //============================================================================= /*: * @plugindesc * This plugin add event Quick Time Events. * * @author TDS * * @param Active QTE Switch ID * @desc ID of the switch to turn ON or OFF when QTE's are active. * @default 1 * * @param QTE Result Variable ID * @desc ID of the variable to put QTE results into. * @default 1 */ //============================================================================= // Node.js path var path = require('path'); // Get Parameters var parameters = PluginManager.parameters("Omori Map QTE"); // Initialize Parameters _TDS_.MapQTE.params = {}; _TDS_.MapQTE.params.activeQTESwitchID = Number(parameters['Active QTE Switch ID'] || 1); _TDS_.MapQTE.params.QTEResultVariableID = Number(parameters['QTE Result Variable ID'] || 1); //ImageManager.reserveSystem('QTE Arrow', 0, 1); //ImageManager.reserveSystem('QTE_OMORI_ATLAS', 0, 1); //============================================================================= // ** Game_Interpreter //----------------------------------------------------------------------------- // The interpreter for running event commands. //============================================================================= // Alias Listing //============================================================================= _TDS_.MapQTE.Game_Interpreter_updateWaitMode = Game_Interpreter.prototype.updateWaitMode; //============================================================================= // * Update Wait Mode //============================================================================= Game_Interpreter.prototype.updateWaitMode = function() { // If Input Mode is for wait if (this._waitMode === 'QTE') { // If Input has been pressed if (!$gameSwitches.value(_TDS_.MapQTE.params.activeQTESwitchID)) { return false; } return true; }; // Return Original Function return _TDS_.MapQTE.Game_Interpreter_updateWaitMode.call(this); }; //============================================================================= // * Start Smash QTE //============================================================================= Game_Interpreter.prototype.startSmashQTE = function(segments, time, width) { // Turn ON QTE Switch $gameSwitches.setValue(_TDS_.MapQTE.params.activeQTESwitchID, true); // Get Window var win = SceneManager._scene._QTEWindowSmash; // If Window Exists if (win) { win.open(); win.activate(); win.setup(segments, time, width) }; this.setWaitMode('QTE'); }; //============================================================================= // * Start Stop the Arrow QTE //============================================================================= Game_Interpreter.prototype.startStopTheArrowQTE = function(direction, delay, x, y) { // Turn ON QTE Switch $gameSwitches.setValue(_TDS_.MapQTE.params.activeQTESwitchID, true); // Get Window var win = SceneManager._scene._QTEWindowStopTheArrow; // If Window Exists if (win) { win.open(); win.activate(); win.setup(direction, delay) if (x !== undefined) { win.x = x; }; if (y !== undefined) { win.y = y; }; }; this.setWaitMode('QTE'); }; //============================================================================= // * Start Hit the Mark QTE //============================================================================= Game_Interpreter.prototype.startHitTheMarkQTE = function(speed, index, x, y) { // Turn ON QTE Switch $gameSwitches.setValue(_TDS_.MapQTE.params.activeQTESwitchID, true); // Get Window var win = SceneManager._scene._QTEWindowHitTheMark; // If Window Exists if (win) { if (index === undefined) { index = Math.randomInt(12); }; win.open(); win.activate(); win.setup(speed, index); if (x !== undefined) { win.x = x; }; if (y !== undefined) { win.y = y; }; }; this.setWaitMode('QTE'); }; //============================================================================= // ** Scene_Map //----------------------------------------------------------------------------- // The scene class of the map screen. //============================================================================= // Alias Listing //============================================================================= _TDS_.MapQTE.Scene_Map_createDisplayObjects = Scene_Map.prototype.createDisplayObjects; //============================================================================= // * Create Display Objects //============================================================================= Scene_Map.prototype.createDisplayObjects = function() { // Run Original Function _TDS_.MapQTE.Scene_Map_createDisplayObjects.call(this); // Create QTE Windows this.createQTEWindows(); }; //============================================================================= // * Create QTE Windows //============================================================================= Scene_Map.prototype.createQTEWindows = function() { // Create Smash QTE Window this._QTEWindowSmash = new Window_OmoriMapQTESmash(); this.addChild(this._QTEWindowSmash); // Create Stop the Arrow QTE window this._QTEWindowStopTheArrow = new Window_OmoriStopTheArrow(); this.addChild(this._QTEWindowStopTheArrow); // // Create Hit The Mark QTE Window this._QTEWindowHitTheMark = new Window_OmoriHitTheMark(); this.addChild(this._QTEWindowHitTheMark) }; //============================================================================= // ** Window_OmoriMapQTESmash //----------------------------------------------------------------------------- // This window is used to display the Smash QTE. //============================================================================= function Window_OmoriMapQTESmash() { this.initialize.apply(this, arguments); } Window_OmoriMapQTESmash.prototype = Object.create(Window_Base.prototype); Window_OmoriMapQTESmash.prototype.constructor = Window_OmoriMapQTESmash; //============================================================================= // * Initialize Object //============================================================================= Window_OmoriMapQTESmash.prototype.initialize = function() { // Completed Segments this._segment = 0; // Press Count this._pressCount = 0; // Press Timer this._timer = 300; // Max Timer this._maxTimer = 300; // Segment Presses this._segmentPresses = [5]; // Alt State & Alt Delay this._altState = 0; this._altDelay = 0; // Close Delay this._closeDelay = 30; // Super Call Window_Base.prototype.initialize.call(this, 14, 14, this.windowWidth(), this.windowHeight()); // Create Bar Sprite this.createBarSprite(); // Create Parallax BAckground this.createParallaxBack(); this.deactivate(); this.openness = 0; }; //============================================================================= // * Settings //============================================================================= Window_OmoriMapQTESmash.prototype.standardPadding = function() { return 0; }; Window_OmoriMapQTESmash.prototype.windowWidth = function() { return 300; }; Window_OmoriMapQTESmash.prototype.windowHeight = function() { return 42 + 5; }; //============================================================================= // * Define Openness //============================================================================= Object.defineProperty(Window_OmoriMapQTESmash.prototype, 'openness', { get: function() { return this._openness; }, set: function(value) { // Super Call Object.getOwnPropertyDescriptor(Window.prototype, 'openness').set.call(this, value); // If Background Exists if (this._smashBarSprite) { var scale = this._openness / 255; this._smashBarSprite.scale.y = scale this._smashBarSprite.y = 5 + (this.height / 2 * (1 - this._openness / 255)); this._parallaxBack.y = 4 + (this.height / 2 * (1 - this._openness / 255)); this._parallaxBack.scale.y = scale this._timeBarSprite.y = (this.height - 7) + (this.height / 2 * (1 - this._openness / 255)); this._timeBarSprite.scale.y = scale; }; }, configurable: true }); //============================================================================= // * Create Bar Sprite //============================================================================= Window_OmoriMapQTESmash.prototype.createParallaxBack = function() { this._parallaxBack = new TilingSprite(); this._parallaxBack.bitmap = ImageManager.loadSystem('QTE Smash Background'); this._parallaxBack.move(5, 5, this.width - 10, 32); this._parallaxBack.opacity = 180 this.addChildToBack(this._parallaxBack); } //============================================================================= // * Create Bar Sprite //============================================================================= Window_OmoriMapQTESmash.prototype.createBarSprite = function() { // Create Bitmap var bitmap = new Bitmap(this.width - 8, this.height - 37); bitmap.fillAll('rgba(255, 0, 0, 1)'); // Create Bar Sprite this._smashBarSprite = new Sprite(bitmap); this._smashBarSprite.width = 0 this._smashBarSprite.opacity = 180 this._smashBarSprite.x = 5; this._smashBarSprite.y = 5; this.addChildToBack(this._smashBarSprite); // Create Time Bar Sprite this._timeBarSprite = new Sprite(); this._timeBarSprite.x = 5; this._timeBarSprite.y = this.height - 7; this.addChild(this._timeBarSprite); }; //============================================================================= // * Setup //============================================================================= Window_OmoriMapQTESmash.prototype.setup = function(segments = [5], time = 10, width = 400) { // Set Values this._segment = 0; this._pressCount = 0; this._timer = time this._maxTimer = time; this._segmentPresses = segments.clone(); this._closeDelay = 61; // Alt State & Alt Delay this._altState = 0; this._altDelay = 0; // Reset Blend Color this._smashBarSprite.setBlendColor([0, 0, 0, 0]); // Refresh Contents this.refresh(); // Update Smash Bar this.updateSmashBar(); // Update Timer Bar this.updateTimeBar(); }; //============================================================================= // * Refresh //============================================================================= Window_OmoriMapQTESmash.prototype.refresh = function() { // Create Bitmap var bitmap = new Bitmap(this.width - 10, this.height - 15); bitmap.fillAll('rgba(255, 0, 0, 1)'); // Create Bar Sprite this._smashBarSprite.bitmap = bitmap; // Recreate Contents this.createContents(); // Create Time Bar Bitmap bitmap = new Bitmap(this.width - 10, 2); bitmap.fillAll('rgba(255, 255, 0, 1)'); this._timeBarSprite.bitmap = bitmap; var segments = this._segmentPresses.length; this._segmentWidth = this.width / segments; this.contents.fillRect(4, this.height - 11, this.width - 8, 2, 'rgba(0, 0, 0, 1)'); this.contents.fillRect(4, this.height - 10, this.width - 8, 2, 'rgba(255, 255, 255, 1)'); // console.log( this._segmentWidth ) for (var i = 1; i < segments; i++) { var x = i * this._segmentWidth; this.contents.fillRect(x - 1, 4, 3, this.height - 14, 'rgba(0, 0, 0, 1)'); this.contents.fillRect(x, 4, 1, this.height - 14, 'rgba(255, 255, 255, 1)'); }; this.x = (Graphics.width - this.width) / 2; this.y = (Graphics.height - this.height) / 2; }; //============================================================================= // * Finish Processing //============================================================================= Window_OmoriMapQTESmash.prototype.finish = function() { // Turn ON QTE Switch $gameSwitches.setValue(_TDS_.MapQTE.params.activeQTESwitchID, false); // Set Achieved Segment $gameVariables.setValue(_TDS_.MapQTE.params.QTEResultVariableID, this._segment); // Close & Deactivate this.close(); this.deactivate(); }; //============================================================================= // * Are Smash Keys Being Triggered //============================================================================= Window_OmoriMapQTESmash.prototype.isSmashTriggered = function() { return Input.isTriggered('ok'); }; //============================================================================= // * Frame Update //============================================================================= Window_OmoriMapQTESmash.prototype.update = function() { // Super Call Window_Base.prototype.update.call(this); // If not open or active if (!this.isOpen() || !this.active) { return; }; // Get Background Speed Rate var rate = this._segment / (Math.max(this._segmentPresses.length-1,1)); // Get Speed var speed = Math.max(rate * 5, 1.5); // Move Parallax Back this._parallaxBack.origin.x -= speed; // If Timer is 0 or less if (this._timer <= 0) { // Finish this.finish(); return; } if (this._timer > 0) { this._timer--; this.updateTimeBar(); }; if (this._segment < this._segmentPresses.length) { if (this.isSmashTriggered()) { // Increase Press Count this._pressCount++; if (this._pressCount >= this._segmentPresses[this._segment]) { this._segment++; this._pressCount = 0; this.updateSmashBar(); }; }; } else { // Decrease alt delay this._altDelay--; if (this._altDelay <= 0) { if (this._altState === 0) { this._smashBarSprite.setBlendColor([255, 255, 255, 255]) } else { this._smashBarSprite.setBlendColor([0, 0, 0, 0]); }; this._altState = (this._altState + 1) % 2 this._altDelay = 10; }; // Decrease Close Delay if (this._closeDelay > 0) { this._closeDelay--; } // If Timer is 0 or less or close delay is 0 or less if (this._timer <= 0 || this._closeDelay <= 0) { this.finish() } }; }; //============================================================================= // * Update Smash Bar //============================================================================= Window_OmoriMapQTESmash.prototype.updateSmashBar = function() { // Get Original Width var width = this._segment * (this._segmentWidth ); this._smashBarSprite.width = width - 3; }; //============================================================================= // * Update Time Bar //============================================================================= Window_OmoriMapQTESmash.prototype.updateTimeBar = function() { // Get Original Width var width = this._timeBarSprite.bitmap.width; var rate = this._timer / this._maxTimer; // Set Timer Width this._timeBarSprite.width = rate * width; }; //============================================================================= // ** Window_OmoriStopTheArrow //----------------------------------------------------------------------------- // This window is used to display the stop the arrow QTE. //============================================================================= function Window_OmoriStopTheArrow() { this.initialize.apply(this, arguments); } Window_OmoriStopTheArrow.prototype = Object.create(Window_Base.prototype); Window_OmoriStopTheArrow.prototype.constructor = Window_OmoriStopTheArrow; //============================================================================= // * Initialize Object //============================================================================= Window_OmoriStopTheArrow.prototype.initialize = function(index) { this._arrowIndex = 0; this._arrowDelay = 10; this._arrowDelayCount = 0; // Arrow Direction (0: Right, 1: Left) this._arrowDirection = 0; // Facing Direction this._facingDirection = 'up'; // Set Container Y this._containerY = 0; // Super Call Window_Base.prototype.initialize.call(this, 14, 200, this.windowWidth(), this.windowHeight()); ImageManager.loadSystem('QTE Arrow') // Create Background Sprite this.createBackgroundSprite(); this.createArrowSprites(); // Center Window this.x = (Graphics.width - this.width) / 2; this.y = (Graphics.height - this.height) / 2; // Close this.openness = 0; this.deactivate(); }; //============================================================================= // * Settings //============================================================================= Window_OmoriStopTheArrow.prototype.standardPadding = function() { return 0; }; Window_OmoriStopTheArrow.prototype.windowWidth = function() { return 96; }; Window_OmoriStopTheArrow.prototype.windowHeight = function() { return 83; }; //============================================================================= // * Define Openness //============================================================================= Object.defineProperty(Window_OmoriStopTheArrow.prototype, 'openness', { get: function() { return this._openness; }, set: function(value) { // Super Call Object.getOwnPropertyDescriptor(Window.prototype, 'openness').set.call(this, value); // If Background Exists if (this._arrowContainer) { var scale = this._openness / 255; if (['up', 'down'].contains(this._facingDirection)) { this._arrowContainer.scale.x = 1; this._arrowContainer.scale.y = scale; } else { this._arrowContainer.scale.x = scale; this._arrowContainer.scale.y = 1; } }; }, configurable: true }); //============================================================================= // * Create Background Sprite //============================================================================= Window_OmoriStopTheArrow.prototype.createBackgroundSprite = function() { // Create Arrow Container this._arrowContainer = new Sprite(); // this._arrowContainer.bitmap.fillAll('rgba(255, 0, 0, 1)'); this._arrowContainer.pivot.x = 43; this._arrowContainer.pivot.y = 36.5; this._arrowContainer.x = this.width / 2; this._arrowContainer.y = this.height / 2; this.addChildToBack(this._arrowContainer); // Create Background Sprite // this._backgroundSprite = new Sprite(ImageManager.loadSystem('QTE Arrow')); this._backgroundSprite = new Sprite(ImageManager.loadSystem('QTE Arrow')); this._backgroundSprite.bitmap.addLoadListener(() => {this._backgroundSprite.setFrame(0, 0, 86,this._backgroundSprite.height)}) // this._backgroundSprite.opacity = 120; // this._backgroundSprite.pivot.x = 43; // this._backgroundSprite.pivot.y = 36.5; // this._backgroundSprite.rotation = Math.PI / 16; // this._backgroundSprite.x = this.width / 2; // this._backgroundSprite.y = this.height / 2; this._arrowContainer.addChild(this._backgroundSprite); // this._backgroundSprite.rotation = (0 * 90) * Math.PI / 180 }; //============================================================================= // * Create Arrow Sprites //============================================================================= Window_OmoriStopTheArrow.prototype.createArrowSprites = function() { // Initialize Arrow Sprites Array this._arrowSprites = []; var bit = ImageManager.loadSystem('QTE Arrow'); // Create Sprites bit.addLoadListener(() => { for (var i = 0; i < 3; i++) { var sprite = new Sprite(ImageManager.loadSystem('QTE Arrow')); this._arrowSprites[i] = sprite; this._arrowContainer.addChild(sprite); }; var sprite = this._arrowSprites[0]; sprite.setFrame(86, 0, 39, sprite.bitmap.height); sprite.x = 7 - 5; sprite.y = 17 - 5; sprite = this._arrowSprites[1]; sprite.setFrame(125, 0, 36, sprite.bitmap.height); sprite.x = 35 - 5; sprite.y = 12 - 5; sprite = this._arrowSprites[2]; sprite.setFrame(163, 0, 36, sprite.bitmap.height); sprite.x = 63 - 5; sprite.y = 17 - 5; // Update Arrows Visibility this.updateArrowsVisibility(); }) }; //============================================================================= // * Setup //============================================================================= Window_OmoriStopTheArrow.prototype.setup = function(direction = 'up', delay = 10) { // Direction Switch Case switch (direction.toLowerCase()) { case 'up': this._arrowContainer.rotation = (0 * 90) * Math.PI / 180 this.width = 96; this.height = 83; break; case 'left': this._arrowContainer.rotation = (3 * 90) * Math.PI / 180 this.width = 96 - 14; this.height = 83 + 12; break; case 'right': this._arrowContainer.rotation = (1 * 90) * Math.PI / 180 this.width = 96 - 14; this.height = 83 + 12; break; case 'down': this.width = 96; this.height = 83; this._arrowContainer.rotation = (2 * 90) * Math.PI / 180 break; }; // Set Facing Direction this._facingDirection = direction; // Reset Delay this._arrowIndex = Math.randomInt(this._arrowSprites.length); this._arrowDelay = delay; this._arrowDelayCount = 0; // Set Arrow Direction this._arrowDirection = 0; // Center Background Sprite this._arrowContainer.x = this.width / 2; this._arrowContainer.y = this.height / 2; // Update Arrow Visibility this.updateArrowsVisibility(); }; //============================================================================= // * Frame Update //============================================================================= Window_OmoriStopTheArrow.prototype.update = function() { // Super Call Window_Base.prototype.update.call(this); // if (Input.isTriggered('control')) { // if (this.isOpen()) { this.close(); }; // if (this.isClosed()) { this.open();}; // }; // var directions = ['up', 'down', 'left', 'right']; // for (var i = 0; i < directions.length; i++) { // // Get Direction // var direction = directions[i]; // if (Input.isTriggered(direction)) { // this.setup(directions[i]) // break; // } // } // If Open & Active if (this.active && this.isOpen()) { // If OK Input if (Input.isTriggered('ok')) { this.finish(); return }; // Increase Arrow Delay Count this._arrowDelayCount++; // If Arrow Delay Count is equal or more than arrow delay if (this._arrowDelayCount >= this._arrowDelay) { // Reset Arrow Delay Count this._arrowDelayCount = 0; // If Arrow Direction is 0 if (this._arrowDirection === 0) { // If Arrow has reached the other side if (this._arrowIndex >= this._arrowSprites.length-1) { // Reduce Index this._arrowIndex--; AudioManager.playSe({name: "sys_cursor1", pan: 0, pitch: 100, volume: 90}); // Set Arrow Direction this._arrowDirection = 1; } else { // Increase Index AudioManager.playSe({name: "SYS_cursor", pan: 0, pitch: 100, volume: 90}); this._arrowIndex++; }; } else { if (this._arrowIndex <= 0) { // Increase Index AudioManager.playSe({name: "sys_cursor1", pan: 0, pitch: 100, volume: 90}); this._arrowIndex++; // Set Arrow Direction this._arrowDirection = 0; } else { AudioManager.playSe({name: "SYS_cursor", pan: 0, pitch: 100, volume: 90}); // Reduce Index this._arrowIndex--; }; } this.updateArrowsVisibility(); }; }; }; //============================================================================= // * Update Visibility of Arrows //============================================================================= Window_OmoriStopTheArrow.prototype.updateArrowsVisibility = function() { for (var i = 0; i < this._arrowSprites.length; i++) { this._arrowSprites[i].visible = (this._arrowIndex === i); }; }; //============================================================================= // * Finish Processing //============================================================================= Window_OmoriStopTheArrow.prototype.finish = function() { // Turn ON QTE Switch $gameSwitches.setValue(_TDS_.MapQTE.params.activeQTESwitchID, false); // Set Achieved Segment $gameVariables.setValue(_TDS_.MapQTE.params.QTEResultVariableID, this._arrowIndex); // Close & Deactivate this.close(); this.deactivate(); }; //============================================================================= // ** Window_OmoriHitTheMark //----------------------------------------------------------------------------- // This window is used to display the hit the mark QTE. //============================================================================= function Window_OmoriHitTheMark() { this.initialize.apply(this, arguments); } Window_OmoriHitTheMark.prototype = Object.create(Window_Base.prototype); Window_OmoriHitTheMark.prototype.constructor = Window_OmoriHitTheMark; //============================================================================= // * Initialize Object //============================================================================= Window_OmoriHitTheMark.prototype.initialize = function() { // Pointer Move Speed this._speed = 3; // Movement Direction this._direction = 0; // Set Target Index this._targetIndex = 0; // Set Target Width this._targetWidth = 3 + (this._speed * 2); // Target X this._targetX = 0; // Super Call Window_Base.prototype.initialize.call(this, 14, 0, this.windowWidth(), this.windowHeight()); // Create Background Sprite this.createBackgroundSprite(); // Create Pointer this.createPointer(); // Center Window this.x = (Graphics.width - this.width) / 2; this.y = (Graphics.height - this.height) / 2; // Refresh Contents this.refresh(); this.deactivate(); this.openness = 0; }; //============================================================================= // * Settings //============================================================================= Window_OmoriHitTheMark.prototype.standardPadding = function() { return 0; }; Window_OmoriHitTheMark.prototype.windowWidth = function() { return 216; }; Window_OmoriHitTheMark.prototype.windowHeight = function() { return 66; }; //============================================================================= // * Define Openness //============================================================================= Object.defineProperty(Window_OmoriHitTheMark.prototype, 'openness', { get: function() { return this._openness; }, set: function(value) { // Super Call Object.getOwnPropertyDescriptor(Window.prototype, 'openness').set.call(this, value); // If Background Sprite Exists if (this._backgroundSprite) { var scale = this._openness / 255; this._backgroundSprite.scale.y = scale; }; // If Background Exists if (this._smashBarSprite) { var scale = this._openness / 255; this._smashBarSprite.scale.y = scale this._smashBarSprite.y = 5 + (this.height / 2 * (1 - this._openness / 255)); this._parallaxBack.y = 4 + (this.height / 2 * (1 - this._openness / 255)); this._parallaxBack.scale.y = scale this._timeBarSprite.y = (this.height - 7) + (this.height / 2 * (1 - this._openness / 255)); this._timeBarSprite.scale.y = scale; }; }, configurable: true }); //============================================================================= // * Create Background Sprite //============================================================================= Window_OmoriHitTheMark.prototype.createBackgroundSprite = function() { // Create Background Sprite this._backgroundSprite = new Sprite(ImageManager.loadSystem('QTE_OMORI_ATLAS')); this._backgroundSprite.bitmap.addLoadListener(() => { this._backgroundSprite.setFrame(0, 0, 206, 56); this._backgroundSprite.x = 5; this._backgroundSprite.y = 33; this._backgroundSprite.anchor.y = 0.5; }) this.addChildToBack(this._backgroundSprite); }; //============================================================================= // * Create Pointer Sprite //============================================================================= Window_OmoriHitTheMark.prototype.createPointer = function() { // // Create Pointer Bitmap // var bitmap = new Bitmap(12, 6); // for (var i = 0; i < 6; i++) { // var x = i // var y = bitmap.height - i; // var w = bitmap.width - (i * 2) // bitmap.fillRect(x, y, w, 1, 'rgba(255, 255, 255, 1)'); // }; // // Create Pointer // this._pointer = new Sprite(bitmap); // this._pointer.x = 32 // this._pointer.anchor.set(0.5, 0.5) // this._pointer.y = this.height - 8; // this._pointer.visible = false; // this.addChild(this._pointer); // Create Pointer this._pointer = new Sprite(ImageManager.loadSystem('ACSArrows')); this._pointer.setFrame(3 * 32, 0, 32, 29); this._pointer.x = 32 this._pointer.anchor.set(0.5, 0.5) this._pointer.y = this.height + 5; this._pointer.visible = false; this.addChild(this._pointer); }; //============================================================================= // * Setup //============================================================================= Window_OmoriHitTheMark.prototype.setup = function(speed, index) { // Pointer Move Speed this._speed = speed; // Movement Direction this._direction = 0; // Set Target Index Randomly this._targetIndex = index; // Set Stop Flag to false this._stop = false; // Redraw Contents this.refresh(); }; //============================================================================= // * Refresh //============================================================================= Window_OmoriHitTheMark.prototype.refresh = function() { // Clear Contents this.contents.clear(); // Get Bitmap var bitmap = ImageManager.loadSystem('QTE_OMORI_ATLAS'); // console.log(lineSpaceWidth) var index = this._targetIndex; // Get X Position var x = 11 + (index * 17) - index; // Set Paint Opacity this.contents.paintOpacity = 160; bitmap.addLoadListener(() => { switch (this._speed) { case 2: // Set Target Width this._targetWidth = 9; // Adjust X Position by speed x -= 4; // Transfer Bitmap to window this.contents.blt(bitmap, 209, 0, this._targetWidth, bitmap.height, x, 0); break; case 4: // Adjust X Position by speed x -= 7; // Set Target Width this._targetWidth = 15; // Transfer Bitmap to window this.contents.blt(bitmap, 225, 0, this._targetWidth, bitmap.height, x, 0); break; }; this.contents.paintOpacity = 255; }) // Set Target X this._targetX = x; // Set Paint Opacity }; //============================================================================= // * Finish Processing //============================================================================= Window_OmoriHitTheMark.prototype.finish = function() { var padding = 4; var startX = this._targetX - padding; var endX = this._targetX + this._targetWidth + padding; // Check if in Area var inArea = (startX < this._pointer.x && this._pointer.x < endX); // Turn Off QTE Switch $gameSwitches.setValue(_TDS_.MapQTE.params.activeQTESwitchID, false); // Set Achieved Segment $gameVariables.setValue(_TDS_.MapQTE.params.QTEResultVariableID, inArea ? 1 : 0); // Close & Deactivate this.close(); this.deactivate(); // Set Visibility to true this._pointer.visible = false; } //============================================================================= // * Frame Update //============================================================================= Window_OmoriHitTheMark.prototype.update = function() { // Super Call Window_Base.prototype.update.call(this); // Return if Stopped if (this._stop || !this.active) { return } // Set Visibility to true this._pointer.visible = true; // If Ok Triggered if (Input.isTriggered('ok')) { // Set stop flag to true this._stop = true; // Finish this.finish(); return }; // Get Speed var speed = this._speed; // Get Left & Right Borders var left = 11; var right = this.width - 11; // If Direction is 0 (Left) if (this._direction === 0) { if (this._pointer.x <= left ) { this._direction = 1; } else { this._pointer.x = Math.max(this._pointer.x - speed, left); }; } else { if (this._pointer.x >= right) { this._direction = 0; } else { this._pointer.x = Math.min(this._pointer.x + speed, right); }; }; };