public

Rpg Maker Developers Group

Simple enough for a child, powerful enough for a developer

2 Followers

MVSolarflare's Miscellaneous Plugins [SFG]

BMM Archive · July 3, 2026

Preserved forum archive. This topic stores the original first post and locally mirrored RPG Maker Web attachments when available. It is posted by the BMMPlay archive account, not by the original creator.

Original Source

  • Original title: Solarflare's Miscellaneous Plugins [SFG]
  • Original author: Solar_Flare
  • Original date: June 13, 2020
  • Source thread: https://forums.rpgmakerweb.com/threads/solarflares-miscellaneous-plugins-sfg.122826/
  • Source forum path: Game Development Engines > RPG Maker Javascript Plugins > JS Plugin Releases (RMMV)

Summary

, #2) :When 1 ◆Text:None, Window, Bottom :Text:First time!

Archived First Post

Miscellaneous Plugins

I've posted a few plugins in the Plugin Request forum already, so I thought it would be a good idea to gather them all in one place. This thread will only be for small and simple plugins - if I release something big or complex I'll create another thread. Some of my plugins depend on having SFG_Utils installed above them, so if a plugin doesn't work, try installing SFG_Utils before posting a bug report.

Unless otherwise noted, these plugins are not compatible with MZ. If the links below are broken, all these plugins (plus the work-in-progress localization plugin in my signature) can also be found on my website. Some of my plugins can also be downloaded from itch.io. I'll be adding more there bit by bit.

This is just a collection of utility functions that I use in several of my plugins. If you have any trouble getting one of my plugins to work, install this and make sure it's placed above any of my plugins.

Download Link
Itch Link

This allows you to set additional states to be treated as a death state for purposes of targeting, game overs, or both. You can also set an auto-state for 0 MP.

Download Link

This adds an option in the Options menu to set auto-battle for all actors. Turn it on and the game will do all your fights for you.

This plugin is also compatible with RPGMaker MZ.

Download Link

This lets you use balloon icons in battle. Attach them to side-view actors or to enemies.

Download Link

This allows you to restrict equipment based on an actor's stats.

This plugin is also compatible with RPGMaker MZ.

Download Link
Itch Link

This allows triggering an event while in an airship and also adds a way for events to have a "line of sight" that will trigger them when you step on a tile in the same row or column.

This plugin is also compatible with RPGMaker MZ.

Download Link

This basically allows you to do with TP anything that's already possible with MP and HP, plus some extra things specific to TP like customizing what it's set to at the beginning and end of battle.

This plugin is also compatible with RPGMaker MZ.

Download Link
Itch Link

This is a mod of Zeriab_ExtraMaps. It works pretty much the same way; the only real difference is that when you switch map folders, it loads the MapInfos.json from the new folder, which is required for compatibility with some of my plugins such as SFG_Localization and SFG_MapHierarchy.

This plugin is also compatible with RPGMaker MZ.

Download Link

Improves the pathfinding used when navigating the map with the mouse. The improved algorithm recognizes bridges, same-map teleporters, and a few other exotic things, and allows avoiding things like damage floor if at all possible.

Main Thread

Makes maps inherit optional properties (currently BGM, BGS, and battle backs) from their parent map in the editor map hierarchy. Note: This could cause some lag when transferring between maps, especially if you have deep nesting and/or are deploying to the web. I didn't experience any lag in my testing, but your mileage may vary.

This plugin is also compatible with RPGMaker MZ.

Download Link

This lets you shake the screen or play weather effects in the middle of a battle animation. Should work even when calling the battle animation from the map.

Download Link

Adds an option in the Options menu to disable all actor faces in message windows. You can override the setting for individual messages if you wish.

Download Link

Adds an additive trait for parameters, instead of the standard multiplicative trait.

This plugin is also compatible with RPGMaker MZ.

Download Link
Itch Link

This allows setting custom formations that alter how the party is laid out on the battlefield and even grants passive states to actors based on their position.

Main Thread

This allows you to set states that are automatically applied when a condition holds, and removed when the condition no longer holds.

Download Link

Alternatively, copy-paste the following code into a text file and name it SFG_PassiveStates.js:
JavaScript:
/*:
@plugindesc [1.0] Allows you to set states to be applied based on arbitrary conditions.
@author Solarflare Software

@help

Use the following note tag to turn a state into a passive state:

<activeif:true> (states)
  This state is automatically added or removed based on the given condition.
  As with a damage formula, the actor can be referenced as a.
  Game variables are also available as v and switches as s.
  The state object itself can be accessed as state.
*/
var Imported = Imported || {};
(function() {
	var conditionalStates = [];

	var old_startup = Scene_Boot.prototype.start;
	Scene_Boot.prototype.start = function() {
		old_startup.call(this);
		for(var i = 1; i < $dataStates.length; i++) {
			if($dataStates[i].meta.activeif)
				conditionalStates.push(i);
		}
	};
	
	Game_BattlerBase.prototype.isStateConditionallyActive = function(stateId) {
		if(this.isStateResist(stateId)) return false;
		var state = $dataStates[stateId];
		if(!state) return false;
		var cond = state.meta.activeif;
		if(cond) {
			let locals = {
				state: state,
				a: this,
			};
			try {
				return !!Utils.eval(cond, locals);
			} catch(e) {}
		}
		return false;
	};
	
	const old_globalUpdate = Scene_Base.prototype.update;
	Scene_Base.prototype.update = function() {
		old_globalUpdate.call(this);
		$gameParty.refreshPassiveStates();
		$gameTroop.refreshPassiveStates();
	};
	
	const old_isStateAddable = Game_Battler.prototype.isStateAddable;
	const old_removeState = Game_Battler.prototype.removeState;
	Game_Battler.prototype.isStateAddable = function(state) {
		if(conditionalStates.includes(state))
			return this.isStateConditionallyActive(state);
		return old_isStateAddable.call(this, state);
	};
	
	Game_Battler.prototype.removeState = function(state) {
		if(conditionalStates.includes(state) && this.isStateConditionallyActive(state))
			return;
		old_removeState.call(this, state);
	};
	
	Game_Battler.prototype.requestPassiveStateRefresh = function() {
		this._needsPassiveStateUpdate = true;
		this.friendsUnit()._needsPassiveStateUpdate = true;
	};
	
	Game_Battler.prototype.refreshPassiveStates = function() {
		this._needsPassiveStateUpdate = false;
		for(let i = 0; i < conditionalStates.length; i++) {
			let stateId = conditionalStates[i];
			if(this.isStateConditionallyActive(stateId))
				this.addState(stateId);
			else this.removeState(stateId);
		}
	};
	
	// Should also override isStateAddable to return false if the condition is not satisfied, and removeState to not remove it if the condition is still satisfied.
	
	Game_Unit.prototype.requestPassiveStateRefresh = function() {
		this._needsPassiveStateUpdate = true;
		this.members().forEach(who => who.requestPassiveStateRefresh());
	};
	
	Game_Unit.prototype.refreshPassiveStates = function() {
		if(!this._needsPassiveStateUpdate) return;
		this._needsPassiveStateUpdate = false;
		this.members().forEach(function(who) {
			if(who._needsPassiveStateUpdate)
				who.refreshPassiveStates();
		});
	};
	
	Game_Troop.prototype.refreshPassiveStates = function() {
		if(this.inBattle()) Game_Unit.prototype.refreshPassiveStates.call(this);
	};
	
	Game_Party.prototype.refreshPassiveStates = function() {
		// Refresh on all members, even in battle
		var inBattle = this.inBattle();
		this._inBattle = false;
		Game_Unit.prototype.refreshPassiveStates.call(this);
		this._inBattle = inBattle;
	};
	
	const updateParty = () => $gameParty.requestPassiveStateRefresh();
	const updateAll = () => {$gameParty.requestPassiveStateRefresh(); $gameTroop.inBattle() && $gameTroop.requestPassiveStateRefresh()};
	const refreshMethods = [
		{
			class: Game_Battler,
			methods: ['onAllActionsEnd', 'onTurnEnd', 'onBattleStart', 'onBattleEnd', 'refresh'],
		},
		{
			class: Game_Actor,
			check: (self, skill) => self.isLearnedSkill(skill),
			methods: ['learnSkill', 'forgetSkill'],
		},
		{
			class: Game_Enemy,
			methods: ['appear'],
		},
		{
			class: Game_Party,
			methods: ['gainGold', 'gainItem'],
		},
		{
			class: Game_Player,
			update: updateParty,
			methods: ['refresh'],
		},
		{
			class: Game_Player,
			check: (self) => self.isInVehicle(),
			update: updateParty,
			methods: ['getOnOffVehicle'],
		},
		{
			class: Game_Event,
			update: updateParty,
			methods: ['refresh'],
		},
		{
			class: Game_CharacterBase,
			update: updateParty,
			methods: ['increaseSteps', 'setPosition', 'copyPosition'],
		},
		{
			class: Game_Switches,
			update: updateAll,
			methods: ['onChange'],
		},
		{
			class: Game_Variables,
			update: updateAll,
			methods: ['onChange'],
		},
		{
			class: Game_SelfSwitches,
			update: updateAll,
			methods: ['onChange'],
		},
	];
	if(Imported.TH_SelfVariables) {
		refreshMethods.push({
			class: Game_SelfVariables,
			update: updateAll,
			methods: ['onChange'],
		});
	}
	
	for(let cls of refreshMethods) {
		let proto = cls.static ? cls.class : cls.class.prototype;
		for(let fcn of cls.methods) {
			let old = Utils.makeAliasProxy(cls.class, fcn);
			let check = cls.check ? cls.check : (self) => {};
			let update = cls.update ? cls.update : (self) => self.requestPassiveStateRefresh();
			proto[fcn] = function() {
				var before = check(this);
				old(this, ...arguments);
				if(before === undefined || before != check(this, ...arguments)) {
					update(this);
				}
			};
		}
	}
})()

This allows reserve actors (who are in the party but would not normally participate in battle) to occasionally jump onto the battlefield and perform a skill under specific conditions.

Main Thread

Allows you to control how items, weapons, armours, and skills are ordered in various windows. Useful if the lists in your database are not in any logical order.

This plugin is also compatible with RPGMaker MZ.

Download Link

This adds a new command for eventing that lets you check the value of a variable and run code depending on what the value is. Programmers may know this as a "switch statement".

This plugin is also compatible with RPGMaker MZ.

Here's a contrived example of its use:

Code:
◆Control Variables:#0019 += 1
◆Plugin Command:switch @19
◆Show Choices:1, 2, 3, #4~8, 9, 10 (Window, Right, #1, #2)
:When 1
  ◆Text:None, Window, Bottom
  :Text:First time!
  ◆
:When 2
  ◆Text:None, Window, Bottom
  :Text:Second time!
  ◆
:When 3
  ◆Text:None, Window, Bottom
  :Text:Third time!
  ◆
:When #4~8
  ◆Text:None, Window, Bottom
  :Text:Maybe you should stop this...
  ◆
:When 9
  ◆Text:None, Window, Bottom
  :Text:Calm down, that's already nine times!
  ◆
:When 10
  ◆Text:None, Window, Bottom
  :Text:And now it's your tenth time!
  ◆
:End
◆Show Choices:#(value % 5 == 1), 20, >30 (Window, Right, #1, -)
:When #(value % 5 == 1)
  ◆Text:None, Window, Bottom
  :Text:I'm really at a loss for words.
  ◆Plugin Command:switch @19
  ◆Show Choices:>100, >45 (Window, Right, #1, #2)
  :When >100
    ◆Text:None, Window, Bottom
    :Text:Are you serious!? You've exceeeded one hundred!!!
    ◆
  :When >45
    ◆Text:None, Window, Bottom
    :Text:No really, stop it!
    ◆
  :End
  ◆
:When 20
  ◆Text:None, Window, Bottom
  :Text:Twentieth time already!? Are you mad!?
  ◆
:When >30
  ◆Text:None, Window, Bottom
  :Text:More than thirty times! Just... just stop!
  ◆
:When Cancel
  ◆Text:None, Window, Bottom
  :Text:This is starting to get crazy...
  ◆
:End

And another example using strings:

Code:
◆Name Input Processing:Harold, 8 characters
◆Plugin Command:switch $gameActors.actor(1).name()
◆Show Choices:"Harold", #"x"~"zzzzzzz", ~"[aeiou]{3,}" (Window, Right, #1, -)
:When "Harold"
  ◆Text:None, Window, Bottom
  :Text:The default, good choice!
  ◆
:When #"x"~"zzzzzzz"
  ◆Text:None, Window, Bottom
  :Text:That's quite a rare name...
  ◆
:When ~"[aeiou]{3,}"
  ◆Text:None, Window, Bottom
  :Text:So many vowels!
  ◆
:When Cancel
  ◆Text:None, Window, Bottom
  :Text:Not a bad choice!
  ◆
:End

Download Link

This allows you to change how fast time progresses on the map using traits.

Download Link

Adds wait commands for various event commands that have an optional wait. The most useful of this is "waitForMovementRoute", which will wait for a given character's movement route to complete. This lets you set the movement route going, do other stuff while it executes, but later wait for it to complete. If you're having movement routes cut short due to fast-forward, this can fix it.

This plugin is also compatible with RPGMaker MZ.

Download Link

Mods or Add-ons to Other Plugins

An add-on for TAA_BookMenu that will load your books from external text files, one file per book. Note: this does not work for web deployment at this time and may not work on mobile either - it requires NwJS in order to function.

To enable it, set DataSource Type to Book Files in the TAA_BookMenu configuration.

Download Link

Allows hiding or disabling choices by writing a condition directly in the choice box.

Main Thread

A fully-featured system to track relationships between your characters.

Main Thread

Terms of Use

  • You don't need to credit me in the game credits or anything. However, don't remove me from the "author" field in the plugin file. If you do wish to credit me, you can do so as "Solar Flare" or "Solarflare Software".
  • You can use these plugins in commercial or non-commercial games, free of charge.
  • Feel free to modify these plugins however you need for your game. Exception: Do not modify SFG_Utils for any reason. If you need something added to or altered in SFG_Utils, just create a new plugin.
  • If a plugin that I created is not listed in this thread, or if the listing in this thread links to another thread that specifies different terms, these terms of use do not apply to it.
  • You may port these plugins to MZ as long as a port isn't already available in my MZ plugins thread and you change the filename to remove the SFG_ prefix (to avoid making it appear to be an official port; you may add your own prefix if you wish). You still need to leave me in the "author" field in the plugin file.

Downloads / Referenced Files

Log in to download

Log in, then follow the RPG Maker Developers Group to see these download links.

Log in to download

License / Terms Note

Terms of Use You don't need to credit me in the game credits or anything. However, don't remove me from the "author" field in the plugin file. If you do wish to credit me, you can do so as "Solar Flare" or "Solarflare Software". You can use these plugins in commercial or non-commercial games, free of charge. Feel free to modify these plugins however you need for your game. Exception: Do not modify SFG_Utils for any reason. If you need...

Creator Claims / Removal

If you are the original creator and want this listing reassigned, edited, or removed, join BMMPlay and contact the moderators with proof that matches the original RPG Maker Web profile, linked GitHub, itch.io page, or another public creator identity.

#039

Replies (0)

No replies yet.

0 replies 2 views

Log in to reply.

User Avatar