<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Universal Cutscene Skipper]]></title><description><![CDATA[<p dir="auto">Hello hello everyone! We've gone a couple days without much activity and I've gone a couple days working on this thingy, so why not merge the two and give you guys the fruits of my efforts while keeping it busy in here?</p>
<h1>Universal Cutscene Skipper</h1>
<p dir="auto">Now, the reason this is a "universal" skipper is because of how it works: it technically doesn't skip anything at all, but rather runs all the event processes ludicrously fast and instantaneously, allowing the player to "skip" the event process while still ensuring that everything that occurs under the hood such as variables, switches, database changes, and move routes, all continue uninterrupted.</p>
<p dir="auto">This also means that you do not need any plugin commands or labels to work it. Simply install it and define the button you want the player to hold for the cutscene to auto-skip, and it'll work right out the gate, skipping the event process until all processes end, or until a map change.</p>
<p dir="auto">I've only done light testing on this plugin (I actually don't publish plugins very often!) but I can confirm that it both works in a blank project, and in a project with a lot of random arbitrary plugins added. If you guys run into any issues with it, please let me know so I can make the plugin more stable and better!</p>
<p dir="auto">With that said, here's the plugin:</p>
<pre><code>//=============================================================================
 /*:
 * @target MV
 * @plugindesc v0.2.0
 * Use this to make all event processes occur instantly, allowing players to skip scenes.
 * @author Sawyer Friend
 * @help
 * This plugin causes event processes to occur instantly when the selected 
 * button is held.
 *
 * Just as holding the "OK" button will cause event processes to occur 
 * twice as fast, holding the button defined by this plugin will cause
 * those same processes to occur instantly, skipping cutscenes without 
 * causing conflicts. 
 *
 * Any event processes will still occur, so there is no compatibility risk, and it runs
 * the processes instantly until the current event process ends, which means the
 * developer does not need to define strict start and end points.
 * 
 * @param Scene Skip Button
 * @desc This is button used to skip cutscenes.
 * @type combo
 * @option tab
 * @option shift
 * @option control
 * @option pageup
 * @option pagedown
 * @option menu
 * @default cancel
 *
 * 
 * @param Scene Skip Trigger
 * @desc Whether the scene skip occurs by holding the button or by pressing it.
 * @type combo
 * @option hold
 * @option press
 * @default hold
 *
 */
//=============================================================================

var Sawyer = Sawyer || {}
Sawyer.Parameters = PluginManager.parameters('SawyerSceneSkip');
Sawyer.Parameters = Sawyer.Parameters || {};
Sawyer.SceneSkip = Sawyer.SceneSkip || {};
Sawyer.SceneSkip.skipButton = String(Sawyer.Parameters['Scene Skip Button']);
Sawyer.SceneSkip.skipTrigger = String(Sawyer.Parameters['Scene Skip Trigger']);

scene = function(){
	return SceneManager._scene;
}

Scene_Map.prototype.isSkipping = function() {
	var trigger = (
		(Sawyer.SceneSkip.skipTrigger == 'hold' &amp;&amp; Input.isLongPressed(Sawyer.SceneSkip.skipButton)) ||
		(Sawyer.SceneSkip.skipTrigger == 'press' &amp;&amp; Input.isTriggered(Sawyer.SceneSkip.skipButton))
	)
    return ($gameMap.isEventRunning() &amp;&amp; !SceneManager.isSceneChanging() &amp;&amp; trigger);
};

SawyerAliasMapInitForSkip = Scene_Map.prototype.initialize;
Scene_Map.prototype.initialize = function() {
    SawyerAliasMapInitForSkip.call(this);
};

Sawyer.alias_fastForward = Scene_Map.prototype.updateMainMultiply;
Scene_Map.prototype.updateMainMultiply = function() {
    Sawyer.alias_fastForward.call(this);
	if (this.isSkipping()) {
		this._skipFade = true;
		if (!this._skipFadeDuration){
			
		}
		this.startSkipFadeIn(10);
		Sawyer.continueSkip();
	} else {
		this._skipFade = false;
		this.startSkipFadeOut(10);
	}
};

Sawyer._alias_playSE = AudioManager.playSe;
AudioManager.playSe = function(se) {
	if ((scene() instanceof Scene_Map)) {
		if (!scene().isSkipping()){
			Sawyer._alias_playSE.call(this, se);
		}
	} else {
		Sawyer._alias_playSE.call(this, se);
	}
};

Sawyer.checkForEventProcesses = function() {
	if ($gameMap.isEventRunning &amp;&amp; $gameMap.isEventRunning()) return true;
	if ($gameMap.isAnyEventRunning &amp;&amp; $gameMap.isAnyEventRunning()) return true;
	if ($gameMap._interpreter &amp;&amp; $gameMap._interpreter.isRunning()) return true;
	$gameMap._events.forEach(function(event) {
		if (event &amp;&amp; event._interpreter &amp;&amp; event._interpreter.isRunning) return true;
	}, this);
	if (scene().isBusy()) return true;
	if (scene()._fadeDuration &gt; 0) return true;
	
	return false;
};

Sawyer.checkForMovingCharacters = function() {
	var characters = [...$gameMap._events];
	characters.push($gamePlayer);
	
	characters.forEach(function(char) {
		if (char) {
			if (char._moveRouteForcing) return true;
			if (char.isBalloonPlaying()) return true;
			if (char._balloonId &gt; 0) return true;
			if (char._balloonId &gt; 0) return true;
			if (char._balloonDuration &gt; 0) return true;
		}
		
	});
	
	return false;
};



Sawyer.continueSkip = function() {
	var startScene = scene();
	if (scene()._activelySkipping) return;
	
	scene()._activelySkipping = true;
	var skips = 0;
	var maxSkips = 20000;
	Sawyer.endAllBalloons();
	while (skips++ &lt; maxSkips &amp;&amp; scene() === startScene &amp;&amp; (Sawyer.checkForEventProcesses() || Sawyer.checkForMovingCharacters() || Sawyer.isAnyBalloonActive() || Sawyer.checkForAnimations())) {
		scene().updateMain();
		
		var wait = $gameMap._interpreter._waitMode;
		if (wait == 'balloon' || wait == 'animation'){
			$gameMap._interpreter._waitMode = '';
			$gameMap._interpreter._waitCount = 0;
		}
		
		$gameMessage._texts = [];
		scene()._messageWindow.terminateMessage();
	}
	scene()._activelySkipping = false;
	$gamePlayer.refresh();
	Sawyer.endAllBalloons();
};

//The following is just a fadeout copy.

Scene_Map.prototype.createSkipFadeSprite = function(white) {
    if (!this._skipFadeSprite) {
        this._skipFadeSprite = new ScreenSprite();
        this.addChild(this._skipFadeSprite);
    }
    if (white) {
        this._skipFadeSprite.setWhite();
    } else {
        this._skipFadeSprite.setBlack();
    }
};

Scene_Map.prototype.updateSkipFade = function() {
    if (this._skipFadeDuration &gt; 0) {
        var d = this._skipFadeDuration;
        if (this._skipFadeSign &gt; 0) {
            this._skipFadeSprite.opacity -= this._skipFadeSprite.opacity / d;
        } else {
            this._skipFadeSprite.opacity += (255 - this._skipFadeSprite.opacity) / d;
        }
        this._skipFadeDuration--;
    }
};

Scene_Map.prototype.startSkipFadeOut = function(duration, white) {
    this.createSkipFadeSprite(white);
    this._skipFadeSign = -1;
    this._skipFadeDuration = duration || 30;
    this._skipFadeSprite.opacity = 0;
};

Scene_Map.prototype.startSkipFadeIn = function(duration, white) {
    this.createSkipFadeSprite(white);
    this._skipFadeSign = 1;
    this._skipFadeDuration = duration || 30;
    this._skipFadeSprite.opacity = 255;
};


Sawyer._skipAliasUpdate = Scene_Map.prototype.update;
Scene_Map.prototype.update = function() {
    Sawyer._skipAliasUpdate.call(this);
	this.updateSkipFade();
};

Sawyer.isAnyBalloonActive = function() {
	var chars = [$gameMap.events()];
	chars.push($gamePlayer);
	return chars.some(char =&gt;
		(char &amp;&amp; char._balloonDuration &amp;&amp; char._balloonDuration &gt; 0) ||
		(char &amp;&amp; char._balloonId &amp;&amp; char._balloonId &gt; 0)
	);
};

Sawyer.endAllBalloons = function() {
	$gamePlayer.endBalloon();
	$gamePlayer.endAnimation();
	for (var event of $gameMap.events()) if (event) {
		event.endBalloon();
		event.endAnimation();
	}
};



</code></pre>
<p dir="auto">I hope you guys enjoy it! I had a lot of fun making this one and I think it'll be genuinely useful for most projects.</p>
]]></description><link>https://forum.electricairship.com/topic/67/universal-cutscene-skipper</link><generator>RSS for Node</generator><lastBuildDate>Sat, 27 Jun 2026 23:09:52 GMT</lastBuildDate><atom:link href="https://forum.electricairship.com/topic/67.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 20 Jun 2026 05:51:40 GMT</pubDate><ttl>60</ttl></channel></rss>