<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[Save-Point - RPGMaker XP (RGSS) Engine]]></title>
		<link>https://www.save-point.org/</link>
		<description><![CDATA[Save-Point - https://www.save-point.org]]></description>
		<pubDate>Mon, 27 Apr 2026 20:19:27 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Face Sync System Core]]></title>
			<link>https://www.save-point.org/thread-13458.html</link>
			<pubDate>Fri, 10 Apr 2026 23:20:44 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.save-point.org/member.php?action=profile&uid=5">DerVVulfman</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.save-point.org/thread-13458.html</guid>
			<description><![CDATA[<div align="center"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Face Sync System Core</span></span><br />
<span style="font-size: medium;" class="mycode_size">Version: 1.0</span></div>
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Introduction</span></span><br />
<br />
The Face Sync System  is perhaps the first of its kind  within the RPG Maker community. <br />
<br />
Based on a concept by Bethesda Softworks and its lip-file system,  Face Sync is a software package that takes the contents of a pre-generated timing data file and then,  with that timing, it then displays individual animation cels in concert atop  of s designated sprite, whether it is a character sprite on the field map, a character portrait shown within a custom message window, or the like.<br />
<br />
The system core covers most of the necessary mechanics, creating the sprites that are rendered, the retrieval of graphics and the timing data,  the animation functions, and their removal.<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Features</span></span><br />
<ul class="mycode_list"><li>Custom data files that will cache like any other in the data folder</li>
<li>Includes two example scripts showing how to make the requisite data files</li>
<li>Includes a Message Adaptation script to allow face sync in message portraits</li>
<li>Includes a Character Set script to allow face sync on field map sprites</li>
</ul>
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Limitations</span></span><br />
<ul class="mycode_list"><li>Apparently, only one NPC animation per patch script at any one time.  You can show lips syncs occur on a character in the field map and in a message profile pic at the same time, but not two character set sprites on the map at the same time.</li>
<li>Map Movement may affect the accuracy of the Face Sync animations</li>
</ul>
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Screenshots</span></span><br />
<br />
You'd literally be watching someone open and close their mouth.<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Demo</span></span><br />
<br />
<a href="https://app.box.com/s/nooplfix63y3al0ggpbufwt7dknr6wxg" target="_blank" rel="noopener" class="mycode_url"><span style="font-weight: bold;" class="mycode_b">Box Com Download</span></a><br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Instructions</span></span><br />
<br />
Plenty, but in the script<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Compatibility</span></span><br />
<br />
The main core system does not interfere with any content.  It requires patch scripts to connect it to suitable message systems (included in the demo).<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Credits and Thanks</span></span><br />
<br />
Thanks to Remi-Chan for the use of Esperia Frostwhisper from her gaming universe for this demo.<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Terms and Conditions</span></span><br />
<br />
Free to use,  even in commercial projects.  However, I will need some form of due credit.<br />
<br />
Esperia Frostwhisper - the sole property of Remi-Chan.  All Rights Reserved.]]></description>
			<content:encoded><![CDATA[<div align="center"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Face Sync System Core</span></span><br />
<span style="font-size: medium;" class="mycode_size">Version: 1.0</span></div>
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Introduction</span></span><br />
<br />
The Face Sync System  is perhaps the first of its kind  within the RPG Maker community. <br />
<br />
Based on a concept by Bethesda Softworks and its lip-file system,  Face Sync is a software package that takes the contents of a pre-generated timing data file and then,  with that timing, it then displays individual animation cels in concert atop  of s designated sprite, whether it is a character sprite on the field map, a character portrait shown within a custom message window, or the like.<br />
<br />
The system core covers most of the necessary mechanics, creating the sprites that are rendered, the retrieval of graphics and the timing data,  the animation functions, and their removal.<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Features</span></span><br />
<ul class="mycode_list"><li>Custom data files that will cache like any other in the data folder</li>
<li>Includes two example scripts showing how to make the requisite data files</li>
<li>Includes a Message Adaptation script to allow face sync in message portraits</li>
<li>Includes a Character Set script to allow face sync on field map sprites</li>
</ul>
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Limitations</span></span><br />
<ul class="mycode_list"><li>Apparently, only one NPC animation per patch script at any one time.  You can show lips syncs occur on a character in the field map and in a message profile pic at the same time, but not two character set sprites on the map at the same time.</li>
<li>Map Movement may affect the accuracy of the Face Sync animations</li>
</ul>
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Screenshots</span></span><br />
<br />
You'd literally be watching someone open and close their mouth.<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Demo</span></span><br />
<br />
<a href="https://app.box.com/s/nooplfix63y3al0ggpbufwt7dknr6wxg" target="_blank" rel="noopener" class="mycode_url"><span style="font-weight: bold;" class="mycode_b">Box Com Download</span></a><br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Instructions</span></span><br />
<br />
Plenty, but in the script<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Compatibility</span></span><br />
<br />
The main core system does not interfere with any content.  It requires patch scripts to connect it to suitable message systems (included in the demo).<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Credits and Thanks</span></span><br />
<br />
Thanks to Remi-Chan for the use of Esperia Frostwhisper from her gaming universe for this demo.<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Terms and Conditions</span></span><br />
<br />
Free to use,  even in commercial projects.  However, I will need some form of due credit.<br />
<br />
Esperia Frostwhisper - the sole property of Remi-Chan.  All Rights Reserved.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Cammy's Anti-Lag]]></title>
			<link>https://www.save-point.org/thread-13422.html</link>
			<pubDate>Sun, 22 Feb 2026 06:12:50 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.save-point.org/member.php?action=profile&uid=5">DerVVulfman</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.save-point.org/thread-13422.html</guid>
			<description><![CDATA[<div align="center"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Cammy's Anti-Lag</span></span><br />
<span style="font-size: medium;" class="mycode_size">Version: 1.1</span></div>
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Introduction</span></span><br />
<br />
This is a simple-to-use but comprehensive system designed to greatly reduce the amount of lag  within the field map  when an abundance of events exist. It also has the chance to reduce lag when a game developer has an extensive number of common events in play.<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Features</span></span><ul class="mycode_list"><li>Its an ANTI-LAG.  Main focus is to only let events in view function<br />
</li>
<li>Has a simple ON/OFF function by defining an RPGMaker XP Switch<br />
</li>
<li>Does not rewrite or replace key event or sprite arrays<br />
</li>
<li>Allows events so-defined to always run despite being in view or not<br />
</li>
<li>Allows events so-defined to never run, basically turning them into tiles<ul class="mycode_list"><li>Events can be defined within their name or by a script call<br />
</li>
<li>Event names are checked the moment you enter the field map <br />
</li>
<li>Script call changes only affect the map on each entry, not saved</li>
</ul>
</li>
<li>Recognizes AutoRun and parallel process events to always run<br />
</li>
<li>Recognizes events given a scripted "Set Move Route" to run until done<br />
</li>
<li>Limits common events being updated, removing 'trigger only' from the list<ul class="mycode_list"><li>Common events are auto-sorted the first time you enter the field map</li>
</ul>
</li>
</ul>
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Demo</span></span><br />
<br />
<a href="https://app.box.com/s/8wo25h2oh7gs6ddvvt8d4mpf3z7wqdnk" target="_blank" rel="noopener" class="mycode_url"><span style="font-weight: bold;" class="mycode_b">Demo at Box.Com</span></a><br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Instructions</span></span><br />
<br />
Plenty... in the script.<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Compatibility</span></span><br />
<br />
Designed solely for RPGMaker XP.<br />
<br />
Requires rewrites to the Game_Map and Spriteset_Map classes.  A second script, Cammy's Anti-Lag Patch, is a simple copy of both classes with the changes clearly marked.  Those using the RMXP SDK will not require the patch.<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Credits and Thanks</span></span><br />
<br />
Thanks to Zeriab for the concept of limiting common events.<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Author's Notes</span></span><br />
<br />
Making a map with 999 events is time consuming.   Making four virtually identical maps with a lot of individual names with custom anti-lag tags is probably borderline insane.<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Terms and Conditions</span></span><br />
<br />
Free for use, even in commercial games.  Only due credit for both myself and Zeriab for the common event feature are required.]]></description>
			<content:encoded><![CDATA[<div align="center"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Cammy's Anti-Lag</span></span><br />
<span style="font-size: medium;" class="mycode_size">Version: 1.1</span></div>
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Introduction</span></span><br />
<br />
This is a simple-to-use but comprehensive system designed to greatly reduce the amount of lag  within the field map  when an abundance of events exist. It also has the chance to reduce lag when a game developer has an extensive number of common events in play.<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Features</span></span><ul class="mycode_list"><li>Its an ANTI-LAG.  Main focus is to only let events in view function<br />
</li>
<li>Has a simple ON/OFF function by defining an RPGMaker XP Switch<br />
</li>
<li>Does not rewrite or replace key event or sprite arrays<br />
</li>
<li>Allows events so-defined to always run despite being in view or not<br />
</li>
<li>Allows events so-defined to never run, basically turning them into tiles<ul class="mycode_list"><li>Events can be defined within their name or by a script call<br />
</li>
<li>Event names are checked the moment you enter the field map <br />
</li>
<li>Script call changes only affect the map on each entry, not saved</li>
</ul>
</li>
<li>Recognizes AutoRun and parallel process events to always run<br />
</li>
<li>Recognizes events given a scripted "Set Move Route" to run until done<br />
</li>
<li>Limits common events being updated, removing 'trigger only' from the list<ul class="mycode_list"><li>Common events are auto-sorted the first time you enter the field map</li>
</ul>
</li>
</ul>
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Demo</span></span><br />
<br />
<a href="https://app.box.com/s/8wo25h2oh7gs6ddvvt8d4mpf3z7wqdnk" target="_blank" rel="noopener" class="mycode_url"><span style="font-weight: bold;" class="mycode_b">Demo at Box.Com</span></a><br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Instructions</span></span><br />
<br />
Plenty... in the script.<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Compatibility</span></span><br />
<br />
Designed solely for RPGMaker XP.<br />
<br />
Requires rewrites to the Game_Map and Spriteset_Map classes.  A second script, Cammy's Anti-Lag Patch, is a simple copy of both classes with the changes clearly marked.  Those using the RMXP SDK will not require the patch.<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Credits and Thanks</span></span><br />
<br />
Thanks to Zeriab for the concept of limiting common events.<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Author's Notes</span></span><br />
<br />
Making a map with 999 events is time consuming.   Making four virtually identical maps with a lot of individual names with custom anti-lag tags is probably borderline insane.<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Terms and Conditions</span></span><br />
<br />
Free for use, even in commercial games.  Only due credit for both myself and Zeriab for the common event feature are required.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[ChooseFoes XP]]></title>
			<link>https://www.save-point.org/thread-13419.html</link>
			<pubDate>Wed, 18 Feb 2026 02:02:55 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.save-point.org/member.php?action=profile&uid=1471">kyonides</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.save-point.org/thread-13419.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">ChooseFoes XP</span></span></div>
<br />
<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">by Kyonides</span></span></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Introduction</span><br />
<br />
This scriptlet allows you to open a simple menu where you can choose your enemy's troops based on the current map's random enemy encounter list.<br />
It will use the map's battleback picture as its backdrop. Don't worry <img src="https://www.save-point.org/images/smilies/ejlol/worried.gif" alt="Worried" title="Worried" class="smilie smilie_216" /> about this, it will cover the whole RMXP game screen by default. <img src="https://www.save-point.org/images/smilies/ejlol/wink.gif" alt="Winking" title="Winking" class="smilie smilie_33" /><br />
You are encouraged to set a custom BGM, otherwise the scene will remain silent until you have finished picking a foe.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">AVAILABLE MODES</span><br />
<ul class="mycode_list"><li>:accessory<br />
</li>
<li>:levels<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Accessory Mode</span><br />
<br />
By the way, setting a specific "Choose Foe" accessory is mandatory here!<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Actors' Level Average Mode</span><br />
<br />
You must set a default level plus any specific map's average level.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Optional Script Call</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36;game_party.choose_foes_mode = :your_mode</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">The Script</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># * ChooseFoes XP * #<br />
#&nbsp;&nbsp; Not Exactly a Plug-n-Play Script<br />
#&nbsp;&nbsp; Scripter : Kyonides<br />
#&nbsp;&nbsp; 0.9.0 - 2026-02-18<br />
<br />
# This scriptlet allows you to open a simple menu where you can choose your<br />
# enemy's troops based on the current map's random enemy encounter list.<br />
<br />
# - AVAILABLE MODES: :accessory and :levels<br />
<br />
# * Accessory Mode * #<br />
# Setting a specific "Choose Foe" accessory is mandatory here!<br />
# * Average Level Mode * #<br />
# You must set a default level plus any specific map's average level.<br />
<br />
# * Optional Script Call * #<br />
# &#36;game_party.choose_foes_mode = :your_mode<br />
<br />
module ChooseFoes<br />
&nbsp;&nbsp;MODE = :levels<br />
&nbsp;&nbsp;ACCESSORY_ID = 33<br />
&nbsp;&nbsp;MAP_ACTOR_LVL = {}<br />
&nbsp;&nbsp;MAP_ACTOR_LVL[1] = 4<br />
&nbsp;&nbsp;MAP_ACTOR_LVL.default = 5<br />
&nbsp;&nbsp;TITLE = "Pick Your Foe"<br />
&nbsp;&nbsp;# ["Name", Volume or nil, Pitch or nil]<br />
&nbsp;&nbsp;BGM = ["052-Negative01", nil, nil]<br />
<br />
&nbsp;&nbsp;class Scene<br />
&nbsp;&nbsp;&nbsp;&nbsp;def initialize(cb)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@callback = cb<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@list = &#36;game_map.encounter_list<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@commands = @list.map {|n| &#36;data_troops[n].name }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.battle_start_se)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;game_system.bgm_stop<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bgm = BGM.compact<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bgm = RPG::AudioFile.new(*bgm)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Audio.play_anon_bgm(bgm)<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;def main<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@stage = true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fn = &#36;game_map.battleback_name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bb = RPG::Cache.battleback(fn)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;battle_bit = Bitmap.new(640, 480)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;battle_bit.stretch_blt(battle_bit.rect, bb, bb.rect)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n = &#36;game_temp.battle_troop_id<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@backdrop = Sprite.new<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@backdrop.bitmap = battle_bit<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@help_window = Window_Help.new<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@help_window.set_text(TITLE, 1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@command_window = Window_Command.new(240, @commands)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@command_window.x = 200<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@command_window.y = 96<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@command_window.index = @list.index(n)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Input.update<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Graphics.transition(Graphics.frame_rate)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while @stage<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Graphics.update<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Input.update<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;update<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Graphics.freeze<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@command_window.dispose<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@help_window.dispose<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@backdrop.bitmap.dispose<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@backdrop.dispose<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;def update<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@command_window.update<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if Input.trigger?(Input::B) or Input.trigger?(Input::C)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.decision_se)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@stage = nil<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n = @command_window.index<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;game_temp.battle_troop_id = @list[n]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@callback.call<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;end<br />
end<br />
<br />
module Audio<br />
&nbsp;&nbsp;def self.play_anon_bgm(bgm)<br />
&nbsp;&nbsp;&nbsp;&nbsp;if !bgm or bgm.name.empty?<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bgm_stop<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bgm_play("Audio/BGM/" + bgm.name, bgm.volume, bgm.pitch)<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;Graphics.frame_reset<br />
&nbsp;&nbsp;end<br />
end<br />
<br />
class Game_Actor<br />
&nbsp;&nbsp;def can_pick_foes?<br />
&nbsp;&nbsp;&nbsp;&nbsp;ChooseFoes::ACCESSORY_ID == @armor4_id and @armor4_id &gt; 0<br />
&nbsp;&nbsp;end<br />
end<br />
<br />
class Game_Party<br />
&nbsp;&nbsp;alias :kyon_chs_foes_gm_pty_init :initialize<br />
&nbsp;&nbsp;def initialize<br />
&nbsp;&nbsp;&nbsp;&nbsp;kyon_chs_foes_gm_pty_init<br />
&nbsp;&nbsp;&nbsp;&nbsp;@choose_foes_mode = ChooseFoes::MODE<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;def choose_foes_with_accessory?<br />
&nbsp;&nbsp;&nbsp;&nbsp;@actors.find {|a| a.can_pick_foes? } != nil<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;def choose_foes_level_avg?<br />
&nbsp;&nbsp;&nbsp;&nbsp;avg_level = @actors.inject(0) {|t, a| t + a.level }<br />
&nbsp;&nbsp;&nbsp;&nbsp;avg_level /= @actors.size<br />
&nbsp;&nbsp;&nbsp;&nbsp;map_level = ChooseFoes::MAP_ACTOR_LVL[&#36;game_map.map_id]<br />
&nbsp;&nbsp;&nbsp;&nbsp;avg_level &gt;= map_level<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;def choose_foes?<br />
&nbsp;&nbsp;&nbsp;&nbsp;case @choose_foes_mode<br />
&nbsp;&nbsp;&nbsp;&nbsp;when :accessory<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return choose_foes_with_accessory?<br />
&nbsp;&nbsp;&nbsp;&nbsp;when :levels<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return choose_foes_level_avg?<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;end<br />
&nbsp;&nbsp;attr_accessor :choose_foes_mode<br />
end<br />
<br />
class Scene_Map<br />
&nbsp;&nbsp;alias :kyon_chs_foes_scn_mp_cll_btl :call_battle<br />
&nbsp;&nbsp;def call_battle<br />
&nbsp;&nbsp;&nbsp;&nbsp;list = &#36;game_map.encounter_list<br />
&nbsp;&nbsp;&nbsp;&nbsp;if list.size &gt; 1 and &#36;game_party.choose_foes?<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cb = method(:kyon_chs_foes_scn_mp_cll_btl)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;scene = ChooseFoes::Scene.new(cb)<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kyon_chs_foes_scn_mp_cll_btl<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;end<br />
end</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">Terms &amp; Conditions</span></span><br />
<br />
Free as in <img src="https://www.save-point.org/images/smilies/ejlol/beer.gif" alt="Beer" title="Beer" class="smilie smilie_189" /> beer.<br />
Include my nickname in your game credits.<br />
You may mention this forum there as well.<br />
That's it! <img src="https://www.save-point.org/images/smilies/ejlol/tongue.gif" alt="Tongue sticking out" title="Tongue sticking out" class="smilie smilie_24" />]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">ChooseFoes XP</span></span></div>
<br />
<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">by Kyonides</span></span></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Introduction</span><br />
<br />
This scriptlet allows you to open a simple menu where you can choose your enemy's troops based on the current map's random enemy encounter list.<br />
It will use the map's battleback picture as its backdrop. Don't worry <img src="https://www.save-point.org/images/smilies/ejlol/worried.gif" alt="Worried" title="Worried" class="smilie smilie_216" /> about this, it will cover the whole RMXP game screen by default. <img src="https://www.save-point.org/images/smilies/ejlol/wink.gif" alt="Winking" title="Winking" class="smilie smilie_33" /><br />
You are encouraged to set a custom BGM, otherwise the scene will remain silent until you have finished picking a foe.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">AVAILABLE MODES</span><br />
<ul class="mycode_list"><li>:accessory<br />
</li>
<li>:levels<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Accessory Mode</span><br />
<br />
By the way, setting a specific "Choose Foe" accessory is mandatory here!<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Actors' Level Average Mode</span><br />
<br />
You must set a default level plus any specific map's average level.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Optional Script Call</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36;game_party.choose_foes_mode = :your_mode</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">The Script</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># * ChooseFoes XP * #<br />
#&nbsp;&nbsp; Not Exactly a Plug-n-Play Script<br />
#&nbsp;&nbsp; Scripter : Kyonides<br />
#&nbsp;&nbsp; 0.9.0 - 2026-02-18<br />
<br />
# This scriptlet allows you to open a simple menu where you can choose your<br />
# enemy's troops based on the current map's random enemy encounter list.<br />
<br />
# - AVAILABLE MODES: :accessory and :levels<br />
<br />
# * Accessory Mode * #<br />
# Setting a specific "Choose Foe" accessory is mandatory here!<br />
# * Average Level Mode * #<br />
# You must set a default level plus any specific map's average level.<br />
<br />
# * Optional Script Call * #<br />
# &#36;game_party.choose_foes_mode = :your_mode<br />
<br />
module ChooseFoes<br />
&nbsp;&nbsp;MODE = :levels<br />
&nbsp;&nbsp;ACCESSORY_ID = 33<br />
&nbsp;&nbsp;MAP_ACTOR_LVL = {}<br />
&nbsp;&nbsp;MAP_ACTOR_LVL[1] = 4<br />
&nbsp;&nbsp;MAP_ACTOR_LVL.default = 5<br />
&nbsp;&nbsp;TITLE = "Pick Your Foe"<br />
&nbsp;&nbsp;# ["Name", Volume or nil, Pitch or nil]<br />
&nbsp;&nbsp;BGM = ["052-Negative01", nil, nil]<br />
<br />
&nbsp;&nbsp;class Scene<br />
&nbsp;&nbsp;&nbsp;&nbsp;def initialize(cb)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@callback = cb<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@list = &#36;game_map.encounter_list<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@commands = @list.map {|n| &#36;data_troops[n].name }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.battle_start_se)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;game_system.bgm_stop<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bgm = BGM.compact<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bgm = RPG::AudioFile.new(*bgm)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Audio.play_anon_bgm(bgm)<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;def main<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@stage = true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fn = &#36;game_map.battleback_name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bb = RPG::Cache.battleback(fn)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;battle_bit = Bitmap.new(640, 480)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;battle_bit.stretch_blt(battle_bit.rect, bb, bb.rect)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n = &#36;game_temp.battle_troop_id<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@backdrop = Sprite.new<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@backdrop.bitmap = battle_bit<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@help_window = Window_Help.new<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@help_window.set_text(TITLE, 1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@command_window = Window_Command.new(240, @commands)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@command_window.x = 200<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@command_window.y = 96<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@command_window.index = @list.index(n)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Input.update<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Graphics.transition(Graphics.frame_rate)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while @stage<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Graphics.update<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Input.update<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;update<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Graphics.freeze<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@command_window.dispose<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@help_window.dispose<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@backdrop.bitmap.dispose<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@backdrop.dispose<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;def update<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@command_window.update<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if Input.trigger?(Input::B) or Input.trigger?(Input::C)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;game_system.se_play(&#36;data_system.decision_se)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@stage = nil<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n = @command_window.index<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;game_temp.battle_troop_id = @list[n]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@callback.call<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;end<br />
end<br />
<br />
module Audio<br />
&nbsp;&nbsp;def self.play_anon_bgm(bgm)<br />
&nbsp;&nbsp;&nbsp;&nbsp;if !bgm or bgm.name.empty?<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bgm_stop<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bgm_play("Audio/BGM/" + bgm.name, bgm.volume, bgm.pitch)<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;Graphics.frame_reset<br />
&nbsp;&nbsp;end<br />
end<br />
<br />
class Game_Actor<br />
&nbsp;&nbsp;def can_pick_foes?<br />
&nbsp;&nbsp;&nbsp;&nbsp;ChooseFoes::ACCESSORY_ID == @armor4_id and @armor4_id &gt; 0<br />
&nbsp;&nbsp;end<br />
end<br />
<br />
class Game_Party<br />
&nbsp;&nbsp;alias :kyon_chs_foes_gm_pty_init :initialize<br />
&nbsp;&nbsp;def initialize<br />
&nbsp;&nbsp;&nbsp;&nbsp;kyon_chs_foes_gm_pty_init<br />
&nbsp;&nbsp;&nbsp;&nbsp;@choose_foes_mode = ChooseFoes::MODE<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;def choose_foes_with_accessory?<br />
&nbsp;&nbsp;&nbsp;&nbsp;@actors.find {|a| a.can_pick_foes? } != nil<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;def choose_foes_level_avg?<br />
&nbsp;&nbsp;&nbsp;&nbsp;avg_level = @actors.inject(0) {|t, a| t + a.level }<br />
&nbsp;&nbsp;&nbsp;&nbsp;avg_level /= @actors.size<br />
&nbsp;&nbsp;&nbsp;&nbsp;map_level = ChooseFoes::MAP_ACTOR_LVL[&#36;game_map.map_id]<br />
&nbsp;&nbsp;&nbsp;&nbsp;avg_level &gt;= map_level<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;def choose_foes?<br />
&nbsp;&nbsp;&nbsp;&nbsp;case @choose_foes_mode<br />
&nbsp;&nbsp;&nbsp;&nbsp;when :accessory<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return choose_foes_with_accessory?<br />
&nbsp;&nbsp;&nbsp;&nbsp;when :levels<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return choose_foes_level_avg?<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;end<br />
&nbsp;&nbsp;attr_accessor :choose_foes_mode<br />
end<br />
<br />
class Scene_Map<br />
&nbsp;&nbsp;alias :kyon_chs_foes_scn_mp_cll_btl :call_battle<br />
&nbsp;&nbsp;def call_battle<br />
&nbsp;&nbsp;&nbsp;&nbsp;list = &#36;game_map.encounter_list<br />
&nbsp;&nbsp;&nbsp;&nbsp;if list.size &gt; 1 and &#36;game_party.choose_foes?<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cb = method(:kyon_chs_foes_scn_mp_cll_btl)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;scene = ChooseFoes::Scene.new(cb)<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kyon_chs_foes_scn_mp_cll_btl<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;end<br />
end</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">Terms &amp; Conditions</span></span><br />
<br />
Free as in <img src="https://www.save-point.org/images/smilies/ejlol/beer.gif" alt="Beer" title="Beer" class="smilie smilie_189" /> beer.<br />
Include my nickname in your game credits.<br />
You may mention this forum there as well.<br />
That's it! <img src="https://www.save-point.org/images/smilies/ejlol/tongue.gif" alt="Tongue sticking out" title="Tongue sticking out" class="smilie smilie_24" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[No Dodge / Not Today]]></title>
			<link>https://www.save-point.org/thread-13415.html</link>
			<pubDate>Sun, 15 Feb 2026 16:29:59 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.save-point.org/member.php?action=profile&uid=5">DerVVulfman</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.save-point.org/thread-13415.html</guid>
			<description><![CDATA[<div align="center"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">No Dodge / Not Today</span></span><br />
<span style="font-size: medium;" class="mycode_size">Version: 1.0</span></div>
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Introduction</span></span><br />
<br />
Did you enjoy a feature in the older RPGMaker engines that allowed weapons to avoid or bypass evade or dodge rates?  Do you want an attack that looks at an enemy who is fleet-of-foot and say "Nope!  Not today, pal!" and just fry him with a fire blast regardless of how high his evasion rate was set?<br />
<br />
This script lets you determine which attack objects can slip in and bypass the evasion rate of a battler, be it hero or enemy.  Indeed, you may craft weapons that can get past the EVA score of a custom Hydra,  even if set to a score of 99.  Or you can create a lethal Kobold boss who can get through and ignore the excellent EVA rating of your hero's armor.<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Features</span></span><ul class="mycode_list"><li>Define weapons that ignore target EVA scores (akin to RM2K+ dodge rates)</li>
<li>Define skills, states and items that ignore target EVA scores</li>
<li>Make enemies capable of ignoring hero armor EVA scores</li>
</ul>
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Screenshots</span></span><br />
<br />
Nothing to see here.  Its a base mechanics system with no visible flourishes<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Demo</span></span><br />
<br />
Nah.<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Script</span></span><br />
<br />
<div class="tborder">
  			<div class="thead" style="padding:4px; margin:1px;"><input type="button" class="button" value="+" style="font-family:Monospace; padding:0px" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].style.display=='none'){ this.parentNode.parentNode.getElementsByTagName('div')[1].style.display='';this.value='-';} else {this.parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.value='+';}"/> No Dodging Allowed!!!</div>
  			<div class="trow2" style="display:none; padding:4px; margin:1px;"><div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#==============================================================================<br />
# ** No Dodge / Not Today<br />
#------------------------------------------------------------------------------<br />
#&nbsp;&nbsp;&nbsp;&nbsp;by DerVVulfman<br />
#&nbsp;&nbsp;&nbsp;&nbsp;version 1.0<br />
#&nbsp;&nbsp;&nbsp;&nbsp;02-15-2026 (MM-DD-YYYY)<br />
#&nbsp;&nbsp;&nbsp;&nbsp;RGSS / RMXP<br />
#==============================================================================<br />
#<br />
#&nbsp;&nbsp;INTRODUCTION:<br />
#&nbsp;&nbsp;=============<br />
#<br />
#&nbsp;&nbsp;Did you enjoy a feature in the older RPGMaker engines that allowed weapons<br />
#&nbsp;&nbsp;to avoid or bypass evade or dodge rates?&nbsp;&nbsp;Do you want an attack that looks<br />
#&nbsp;&nbsp;at an enemy who is fleet-of-foot and say "Nope!&nbsp;&nbsp;Not today, pal!" and just<br />
#&nbsp;&nbsp;fry him with a fire blast regardless of how high his evasion rate was set?<br />
#<br />
#&nbsp;&nbsp;This script lets you determine which attack objects can slip in and bypass<br />
#&nbsp;&nbsp;the evasion rate of a battler, be it hero or enemy.&nbsp;&nbsp;Indeed, you may craft<br />
#&nbsp;&nbsp;weapons that can get past the EVA score of a custom Hydra,&nbsp;&nbsp;even if set to<br />
#&nbsp;&nbsp;a score of 99.&nbsp;&nbsp;Or you can create a lethal Kobold boss who can get through<br />
#&nbsp;&nbsp;and ignore the excellent EVA rating of your hero's armor.<br />
#<br />
#<br />
#------------------------------------------------------------------------------<br />
#<br />
#&nbsp;&nbsp;INSTRUCTIONS:<br />
#&nbsp;&nbsp;=============<br />
#<br />
#&nbsp;&nbsp;You just fill the appropriate array in the config section&nbsp;&nbsp;with the IDs of<br />
#&nbsp;&nbsp;your weapons, skills, or like effects&nbsp;&nbsp;that ignore the target's EVA value.<br />
#&nbsp;&nbsp;That's REALLY all there is to it.<br />
#<br />
#<br />
#------------------------------------------------------------------------------<br />
#<br />
#&nbsp;&nbsp;WEIRD NOTE:<br />
#&nbsp;&nbsp;===========<br />
#<br />
#&nbsp;&nbsp;You just fill the appropriate array in the config section&nbsp;&nbsp;with the IDs of<br />
#&nbsp;&nbsp;By default,&nbsp;&nbsp;enemies do not use weapons or any form of gear. So enemies do<br />
#&nbsp;&nbsp;not have any form&nbsp;&nbsp;of 'weapon_id' value applied.&nbsp;&nbsp;But,&nbsp;&nbsp;if a scripter does<br />
#&nbsp;&nbsp;make weapon use possible for enemies,&nbsp;&nbsp;I made a value&nbsp;&nbsp;in the config setup<br />
#&nbsp;&nbsp;to permit such a value to be tested.&nbsp;&nbsp;I don't expect this to be used much.<br />
#<br />
#<br />
#==============================================================================<br />
#<br />
#&nbsp;&nbsp;COMPATABILITY:<br />
#&nbsp;&nbsp;==============<br />
#<br />
#&nbsp;&nbsp;Designed solely for RPGMaker XP.<br />
#<br />
#&nbsp;&nbsp;All contents have been aliased, or had code attached to existing methods<br />
#&nbsp;&nbsp;without rewrites.<br />
#<br />
#<br />
#==============================================================================<br />
#<br />
#&nbsp;&nbsp;TERMS AND CONDITIONS:<br />
#&nbsp;&nbsp;=====================<br />
#<br />
#&nbsp;&nbsp;Free for use, even in commercial projects.&nbsp;&nbsp;Only due credit for myself and<br />
#&nbsp;&nbsp;Ace_V who suggested a like feature is required.<br />
#<br />
#<br />
#==============================================================================<br />
<br />
<br />
module NoEvade<br />
<br />
<br />
&nbsp;&nbsp;# IDENTIFIER ARRAYS<br />
&nbsp;&nbsp;# =================<br />
&nbsp;&nbsp;# Here, you list the IDs of the weapons, skills, items and even states that<br />
&nbsp;&nbsp;# an attacker may have that makes an enemy unable to evade.<br />
&nbsp;&nbsp;# ---------------------------------------------------------------------------<br />
&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;ENEMY_IDS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = [2]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # State IDs here&nbsp;&nbsp;(default/example: Basilisk)<br />
&nbsp;&nbsp;&nbsp;&nbsp;STATE_IDS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = [13]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# State IDs here&nbsp;&nbsp;(default/example: Sharp)<br />
&nbsp;&nbsp;&nbsp;&nbsp;WEAPON_IDS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= [1]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Weapon IDs here (default/example: Bronze Sw)<br />
&nbsp;&nbsp;&nbsp;&nbsp;SKILL_IDS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = [7]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Skill IDs here&nbsp;&nbsp;(default/example: Fire)<br />
&nbsp;&nbsp;&nbsp;&nbsp;ITEM_IDS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= []&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Item IDs here:&nbsp;&nbsp;(default/example: -none-)<br />
<br />
<br />
&nbsp;&nbsp;# WEAPON USING ENEMIES<br />
&nbsp;&nbsp;# ====================<br />
&nbsp;&nbsp;# Rarely if ever touched, this setting informs the system if a Game_Enemy<br />
&nbsp;&nbsp;# is able to use an equipped weapon, suggesting a custom script in use.<br />
&nbsp;&nbsp;# ---------------------------------------------------------------------------<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ENEMY_WEAPONS&nbsp;&nbsp; = false<br />
<br />
<br />
end<br />
<br />
<br />
<br />
#==============================================================================<br />
# ** Game_Battler<br />
#------------------------------------------------------------------------------<br />
#&nbsp;&nbsp;This class deals with battlers. It's used as a superclass for the Game_Actor<br />
#&nbsp;&nbsp;and Game_Enemy classes.<br />
#==============================================================================<br />
<br />
class Game_Battler<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Determine [Can't Evade] States<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;alias ad_nev_gb_noevade_cant_evade? cant_evade?<br />
&nbsp;&nbsp;alias ad_nev_gb_noevade_ae attack_effect<br />
&nbsp;&nbsp;alias ad_nev_gb_noevade_se skill_effect<br />
&nbsp;&nbsp;alias ad_nev_gb_noevade_ie item_effect<br />
<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * ALIASED / ATTACHED-CODE METHODS<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Determine [Can't Evade] States<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def cant_evade?<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;return true if cant_evade_flag? == true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Exit true for custom flag<br />
&nbsp;&nbsp;&nbsp;&nbsp;return ad_nev_gb_noevade_cant_evade?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Perform the original method<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Applying Normal Attack Effects<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; attacker : battler<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def attack_effect(attacker)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;enemy_evadable?(attacker)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Test for non-evasion enemy<br />
&nbsp;&nbsp;&nbsp;&nbsp;attacker_evadable?(attacker)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Test for non-evasion state<br />
&nbsp;&nbsp;&nbsp;&nbsp;weapon_evadable?(attacker)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Test for non-evasion weapon<br />
&nbsp;&nbsp;&nbsp;&nbsp;effective = ad_nev_gb_noevade_ae(attacker)&nbsp;&nbsp;&nbsp;&nbsp;# Perform the original method<br />
&nbsp;&nbsp;&nbsp;&nbsp;return effective&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Exit with effectiveness<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Apply Skill Effects<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; user&nbsp;&nbsp;: the one using skills (battler)<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; skill : skill<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def skill_effect(user, skill)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;skill_evadable?(skill)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Test for non-evasion skill<br />
&nbsp;&nbsp;&nbsp;&nbsp;effective = ad_nev_gb_noevade_se(user, skill) # Perform the original method<br />
&nbsp;&nbsp;&nbsp;&nbsp;return effective&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Exit with effectiveness<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Application of Item Effects<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; item : item<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def item_effect(item)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;item_evadable?(item)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Test for non-evasion item<br />
&nbsp;&nbsp;&nbsp;&nbsp;effective = ad_nev_gb_noevade_ie(item)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Perform the original method<br />
&nbsp;&nbsp;&nbsp;&nbsp;return effective&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Exit with effectiveness<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * NEW METHODS<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Determine if custom can't evade flags in use<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def cant_evade_flag?<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;return true if @no_ev_enemy&nbsp;&nbsp;&nbsp;&nbsp; == true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Exit true for custom enemy<br />
&nbsp;&nbsp;&nbsp;&nbsp;return true if @no_ev_attacker&nbsp;&nbsp;== true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Exit true for custom state<br />
&nbsp;&nbsp;&nbsp;&nbsp;return true if @no_ev_weapon&nbsp;&nbsp;&nbsp;&nbsp;== true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Exit true for custom weapon<br />
&nbsp;&nbsp;&nbsp;&nbsp;return true if @no_ev_skill&nbsp;&nbsp;&nbsp;&nbsp; == true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Exit true for custom skill<br />
&nbsp;&nbsp;&nbsp;&nbsp;return true if @no_ev_item&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;== true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Exit true for custom item<br />
&nbsp;&nbsp;&nbsp;&nbsp;return false<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Get if Attacker's current state prevents execution<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; attacker : battler<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def attacker_evadable?(attacker)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;@no_ev_attacker = false&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Set flag assuming evadable<br />
&nbsp;&nbsp;&nbsp;&nbsp;for id in attacker.states&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Cycle through states<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if NoEvade::STATE_IDS.include?(id)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# If in the No-Evade list<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@no_ev_attacker = true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# ...set flag as not evadable<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Get if Enemy Attacker prevents evasion<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; attacker : battler<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def enemy_evadable?(attacker)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;@no_ev_enemy = false&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Set flag assuming evadable<br />
&nbsp;&nbsp;&nbsp;&nbsp;unless attacker.is_a?(Game_Enemy)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # If the user isn't an enemy<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# ... exit the method<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;id = attacker.id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Get enemy ID<br />
&nbsp;&nbsp;&nbsp;&nbsp;if NoEvade::ENEMY_IDS.include?(id)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# If in the No-Evade list<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@no_ev_enemy = true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # ...set flag as not evadable<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Get if Attack Weapon prevents evasion<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; attacker : battler<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def weapon_evadable?(attacker)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;@no_ev_weapon = false&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Set flag assuming evadable<br />
&nbsp;&nbsp;&nbsp;&nbsp;if attacker.is_a?(Game_Enemy)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # If the user is an enemy<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unless NoEvade::ENEMY_WEAPONS == true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # ... and cannot use weapons<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# ... exit the method<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;id = attacker.weapon_id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Get the weapon's ID<br />
&nbsp;&nbsp;&nbsp;&nbsp;if NoEvade::WEAPON_IDS.include?(id)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # If in the No-Evade list<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@no_ev_weapon = true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# ...set flag as not evadable<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Get if Skill prevents evasion<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; skill : skill<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def skill_evadable?(skill)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;@no_ev_skill = false&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Set flag assuming evadable<br />
&nbsp;&nbsp;&nbsp;&nbsp;id = skill.id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Get the skill's ID<br />
&nbsp;&nbsp;&nbsp;&nbsp;if NoEvade::SKILL_IDS.include?(id)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# If in the No-Evade list<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@no_ev_skill = true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # ...set flag as not evadable<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Get if item prevents evasion<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; item : item<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def item_evadable?(item)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;@no_ev_item = false&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Set flag assuming evadable<br />
&nbsp;&nbsp;&nbsp;&nbsp;id = item.id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Get the item's ID<br />
&nbsp;&nbsp;&nbsp;&nbsp;if NoEvade::ITEM_IDS.include?(id)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # If in the No-Evade list<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@no_ev_item = true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# ...set flag as not evadable<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
end</code></div></div></div>
		</div>
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Instructions</span></span><br />
<br />
Pretty much simple instructions in the script.<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Compatibility</span></span><br />
<br />
Designed solely for RPGMaker XP.<br />
 <br />
All contents have been aliased, or had code attached to existing methods without rewrites.<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Credits and Thanks</span></span><br />
<br />
Thanks to Ace_V for another script suggestion.<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Terms and Conditions</span></span><br />
<br />
Free for use, even in commercial projects.  Only due credit for myself and Ace_V who suggested a like feature is required.]]></description>
			<content:encoded><![CDATA[<div align="center"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">No Dodge / Not Today</span></span><br />
<span style="font-size: medium;" class="mycode_size">Version: 1.0</span></div>
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Introduction</span></span><br />
<br />
Did you enjoy a feature in the older RPGMaker engines that allowed weapons to avoid or bypass evade or dodge rates?  Do you want an attack that looks at an enemy who is fleet-of-foot and say "Nope!  Not today, pal!" and just fry him with a fire blast regardless of how high his evasion rate was set?<br />
<br />
This script lets you determine which attack objects can slip in and bypass the evasion rate of a battler, be it hero or enemy.  Indeed, you may craft weapons that can get past the EVA score of a custom Hydra,  even if set to a score of 99.  Or you can create a lethal Kobold boss who can get through and ignore the excellent EVA rating of your hero's armor.<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Features</span></span><ul class="mycode_list"><li>Define weapons that ignore target EVA scores (akin to RM2K+ dodge rates)</li>
<li>Define skills, states and items that ignore target EVA scores</li>
<li>Make enemies capable of ignoring hero armor EVA scores</li>
</ul>
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Screenshots</span></span><br />
<br />
Nothing to see here.  Its a base mechanics system with no visible flourishes<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Demo</span></span><br />
<br />
Nah.<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Script</span></span><br />
<br />
<div class="tborder">
  			<div class="thead" style="padding:4px; margin:1px;"><input type="button" class="button" value="+" style="font-family:Monospace; padding:0px" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].style.display=='none'){ this.parentNode.parentNode.getElementsByTagName('div')[1].style.display='';this.value='-';} else {this.parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.value='+';}"/> No Dodging Allowed!!!</div>
  			<div class="trow2" style="display:none; padding:4px; margin:1px;"><div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#==============================================================================<br />
# ** No Dodge / Not Today<br />
#------------------------------------------------------------------------------<br />
#&nbsp;&nbsp;&nbsp;&nbsp;by DerVVulfman<br />
#&nbsp;&nbsp;&nbsp;&nbsp;version 1.0<br />
#&nbsp;&nbsp;&nbsp;&nbsp;02-15-2026 (MM-DD-YYYY)<br />
#&nbsp;&nbsp;&nbsp;&nbsp;RGSS / RMXP<br />
#==============================================================================<br />
#<br />
#&nbsp;&nbsp;INTRODUCTION:<br />
#&nbsp;&nbsp;=============<br />
#<br />
#&nbsp;&nbsp;Did you enjoy a feature in the older RPGMaker engines that allowed weapons<br />
#&nbsp;&nbsp;to avoid or bypass evade or dodge rates?&nbsp;&nbsp;Do you want an attack that looks<br />
#&nbsp;&nbsp;at an enemy who is fleet-of-foot and say "Nope!&nbsp;&nbsp;Not today, pal!" and just<br />
#&nbsp;&nbsp;fry him with a fire blast regardless of how high his evasion rate was set?<br />
#<br />
#&nbsp;&nbsp;This script lets you determine which attack objects can slip in and bypass<br />
#&nbsp;&nbsp;the evasion rate of a battler, be it hero or enemy.&nbsp;&nbsp;Indeed, you may craft<br />
#&nbsp;&nbsp;weapons that can get past the EVA score of a custom Hydra,&nbsp;&nbsp;even if set to<br />
#&nbsp;&nbsp;a score of 99.&nbsp;&nbsp;Or you can create a lethal Kobold boss who can get through<br />
#&nbsp;&nbsp;and ignore the excellent EVA rating of your hero's armor.<br />
#<br />
#<br />
#------------------------------------------------------------------------------<br />
#<br />
#&nbsp;&nbsp;INSTRUCTIONS:<br />
#&nbsp;&nbsp;=============<br />
#<br />
#&nbsp;&nbsp;You just fill the appropriate array in the config section&nbsp;&nbsp;with the IDs of<br />
#&nbsp;&nbsp;your weapons, skills, or like effects&nbsp;&nbsp;that ignore the target's EVA value.<br />
#&nbsp;&nbsp;That's REALLY all there is to it.<br />
#<br />
#<br />
#------------------------------------------------------------------------------<br />
#<br />
#&nbsp;&nbsp;WEIRD NOTE:<br />
#&nbsp;&nbsp;===========<br />
#<br />
#&nbsp;&nbsp;You just fill the appropriate array in the config section&nbsp;&nbsp;with the IDs of<br />
#&nbsp;&nbsp;By default,&nbsp;&nbsp;enemies do not use weapons or any form of gear. So enemies do<br />
#&nbsp;&nbsp;not have any form&nbsp;&nbsp;of 'weapon_id' value applied.&nbsp;&nbsp;But,&nbsp;&nbsp;if a scripter does<br />
#&nbsp;&nbsp;make weapon use possible for enemies,&nbsp;&nbsp;I made a value&nbsp;&nbsp;in the config setup<br />
#&nbsp;&nbsp;to permit such a value to be tested.&nbsp;&nbsp;I don't expect this to be used much.<br />
#<br />
#<br />
#==============================================================================<br />
#<br />
#&nbsp;&nbsp;COMPATABILITY:<br />
#&nbsp;&nbsp;==============<br />
#<br />
#&nbsp;&nbsp;Designed solely for RPGMaker XP.<br />
#<br />
#&nbsp;&nbsp;All contents have been aliased, or had code attached to existing methods<br />
#&nbsp;&nbsp;without rewrites.<br />
#<br />
#<br />
#==============================================================================<br />
#<br />
#&nbsp;&nbsp;TERMS AND CONDITIONS:<br />
#&nbsp;&nbsp;=====================<br />
#<br />
#&nbsp;&nbsp;Free for use, even in commercial projects.&nbsp;&nbsp;Only due credit for myself and<br />
#&nbsp;&nbsp;Ace_V who suggested a like feature is required.<br />
#<br />
#<br />
#==============================================================================<br />
<br />
<br />
module NoEvade<br />
<br />
<br />
&nbsp;&nbsp;# IDENTIFIER ARRAYS<br />
&nbsp;&nbsp;# =================<br />
&nbsp;&nbsp;# Here, you list the IDs of the weapons, skills, items and even states that<br />
&nbsp;&nbsp;# an attacker may have that makes an enemy unable to evade.<br />
&nbsp;&nbsp;# ---------------------------------------------------------------------------<br />
&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;ENEMY_IDS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = [2]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # State IDs here&nbsp;&nbsp;(default/example: Basilisk)<br />
&nbsp;&nbsp;&nbsp;&nbsp;STATE_IDS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = [13]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# State IDs here&nbsp;&nbsp;(default/example: Sharp)<br />
&nbsp;&nbsp;&nbsp;&nbsp;WEAPON_IDS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= [1]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Weapon IDs here (default/example: Bronze Sw)<br />
&nbsp;&nbsp;&nbsp;&nbsp;SKILL_IDS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = [7]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Skill IDs here&nbsp;&nbsp;(default/example: Fire)<br />
&nbsp;&nbsp;&nbsp;&nbsp;ITEM_IDS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= []&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Item IDs here:&nbsp;&nbsp;(default/example: -none-)<br />
<br />
<br />
&nbsp;&nbsp;# WEAPON USING ENEMIES<br />
&nbsp;&nbsp;# ====================<br />
&nbsp;&nbsp;# Rarely if ever touched, this setting informs the system if a Game_Enemy<br />
&nbsp;&nbsp;# is able to use an equipped weapon, suggesting a custom script in use.<br />
&nbsp;&nbsp;# ---------------------------------------------------------------------------<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ENEMY_WEAPONS&nbsp;&nbsp; = false<br />
<br />
<br />
end<br />
<br />
<br />
<br />
#==============================================================================<br />
# ** Game_Battler<br />
#------------------------------------------------------------------------------<br />
#&nbsp;&nbsp;This class deals with battlers. It's used as a superclass for the Game_Actor<br />
#&nbsp;&nbsp;and Game_Enemy classes.<br />
#==============================================================================<br />
<br />
class Game_Battler<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Determine [Can't Evade] States<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;alias ad_nev_gb_noevade_cant_evade? cant_evade?<br />
&nbsp;&nbsp;alias ad_nev_gb_noevade_ae attack_effect<br />
&nbsp;&nbsp;alias ad_nev_gb_noevade_se skill_effect<br />
&nbsp;&nbsp;alias ad_nev_gb_noevade_ie item_effect<br />
<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * ALIASED / ATTACHED-CODE METHODS<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Determine [Can't Evade] States<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def cant_evade?<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;return true if cant_evade_flag? == true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Exit true for custom flag<br />
&nbsp;&nbsp;&nbsp;&nbsp;return ad_nev_gb_noevade_cant_evade?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Perform the original method<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Applying Normal Attack Effects<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; attacker : battler<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def attack_effect(attacker)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;enemy_evadable?(attacker)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Test for non-evasion enemy<br />
&nbsp;&nbsp;&nbsp;&nbsp;attacker_evadable?(attacker)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Test for non-evasion state<br />
&nbsp;&nbsp;&nbsp;&nbsp;weapon_evadable?(attacker)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Test for non-evasion weapon<br />
&nbsp;&nbsp;&nbsp;&nbsp;effective = ad_nev_gb_noevade_ae(attacker)&nbsp;&nbsp;&nbsp;&nbsp;# Perform the original method<br />
&nbsp;&nbsp;&nbsp;&nbsp;return effective&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Exit with effectiveness<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Apply Skill Effects<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; user&nbsp;&nbsp;: the one using skills (battler)<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; skill : skill<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def skill_effect(user, skill)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;skill_evadable?(skill)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Test for non-evasion skill<br />
&nbsp;&nbsp;&nbsp;&nbsp;effective = ad_nev_gb_noevade_se(user, skill) # Perform the original method<br />
&nbsp;&nbsp;&nbsp;&nbsp;return effective&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Exit with effectiveness<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Application of Item Effects<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; item : item<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def item_effect(item)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;item_evadable?(item)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Test for non-evasion item<br />
&nbsp;&nbsp;&nbsp;&nbsp;effective = ad_nev_gb_noevade_ie(item)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Perform the original method<br />
&nbsp;&nbsp;&nbsp;&nbsp;return effective&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Exit with effectiveness<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * NEW METHODS<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Determine if custom can't evade flags in use<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def cant_evade_flag?<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;return true if @no_ev_enemy&nbsp;&nbsp;&nbsp;&nbsp; == true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Exit true for custom enemy<br />
&nbsp;&nbsp;&nbsp;&nbsp;return true if @no_ev_attacker&nbsp;&nbsp;== true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Exit true for custom state<br />
&nbsp;&nbsp;&nbsp;&nbsp;return true if @no_ev_weapon&nbsp;&nbsp;&nbsp;&nbsp;== true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Exit true for custom weapon<br />
&nbsp;&nbsp;&nbsp;&nbsp;return true if @no_ev_skill&nbsp;&nbsp;&nbsp;&nbsp; == true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Exit true for custom skill<br />
&nbsp;&nbsp;&nbsp;&nbsp;return true if @no_ev_item&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;== true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Exit true for custom item<br />
&nbsp;&nbsp;&nbsp;&nbsp;return false<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Get if Attacker's current state prevents execution<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; attacker : battler<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def attacker_evadable?(attacker)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;@no_ev_attacker = false&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Set flag assuming evadable<br />
&nbsp;&nbsp;&nbsp;&nbsp;for id in attacker.states&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Cycle through states<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if NoEvade::STATE_IDS.include?(id)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# If in the No-Evade list<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@no_ev_attacker = true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# ...set flag as not evadable<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Get if Enemy Attacker prevents evasion<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; attacker : battler<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def enemy_evadable?(attacker)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;@no_ev_enemy = false&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Set flag assuming evadable<br />
&nbsp;&nbsp;&nbsp;&nbsp;unless attacker.is_a?(Game_Enemy)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # If the user isn't an enemy<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# ... exit the method<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;id = attacker.id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Get enemy ID<br />
&nbsp;&nbsp;&nbsp;&nbsp;if NoEvade::ENEMY_IDS.include?(id)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# If in the No-Evade list<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@no_ev_enemy = true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # ...set flag as not evadable<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Get if Attack Weapon prevents evasion<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; attacker : battler<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def weapon_evadable?(attacker)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;@no_ev_weapon = false&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Set flag assuming evadable<br />
&nbsp;&nbsp;&nbsp;&nbsp;if attacker.is_a?(Game_Enemy)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # If the user is an enemy<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unless NoEvade::ENEMY_WEAPONS == true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # ... and cannot use weapons<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# ... exit the method<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;id = attacker.weapon_id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Get the weapon's ID<br />
&nbsp;&nbsp;&nbsp;&nbsp;if NoEvade::WEAPON_IDS.include?(id)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # If in the No-Evade list<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@no_ev_weapon = true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# ...set flag as not evadable<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Get if Skill prevents evasion<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; skill : skill<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def skill_evadable?(skill)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;@no_ev_skill = false&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Set flag assuming evadable<br />
&nbsp;&nbsp;&nbsp;&nbsp;id = skill.id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Get the skill's ID<br />
&nbsp;&nbsp;&nbsp;&nbsp;if NoEvade::SKILL_IDS.include?(id)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# If in the No-Evade list<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@no_ev_skill = true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # ...set flag as not evadable<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Get if item prevents evasion<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; item : item<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def item_evadable?(item)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;@no_ev_item = false&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Set flag assuming evadable<br />
&nbsp;&nbsp;&nbsp;&nbsp;id = item.id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Get the item's ID<br />
&nbsp;&nbsp;&nbsp;&nbsp;if NoEvade::ITEM_IDS.include?(id)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # If in the No-Evade list<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@no_ev_item = true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# ...set flag as not evadable<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
end</code></div></div></div>
		</div>
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Instructions</span></span><br />
<br />
Pretty much simple instructions in the script.<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Compatibility</span></span><br />
<br />
Designed solely for RPGMaker XP.<br />
 <br />
All contents have been aliased, or had code attached to existing methods without rewrites.<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Credits and Thanks</span></span><br />
<br />
Thanks to Ace_V for another script suggestion.<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Terms and Conditions</span></span><br />
<br />
Free for use, even in commercial projects.  Only due credit for myself and Ace_V who suggested a like feature is required.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Active Bound-Area Events]]></title>
			<link>https://www.save-point.org/thread-13405.html</link>
			<pubDate>Sun, 08 Feb 2026 02:23:50 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.save-point.org/member.php?action=profile&uid=5">DerVVulfman</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.save-point.org/thread-13405.html</guid>
			<description><![CDATA[<div align="center"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Active Bound-Area Events</span></span><br />
<span style="font-size: medium;" class="mycode_size">Version: 1.0</span></div>
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Introduction</span></span><br />
<br />
Utilizing the area-defining mechanics  of "Expanded Encounter Areas",  you can now create events that move about randomly, but only within areas which  you have defined. Monsters may never leave their hunting area,  guards may be forced to stay  within their posts,  and a throng of wild party animals might find they never leave the opulant dance floor.<br />
<br />
Its up to you.<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Screenshots</span></span><br />
<br />
Picture a guy running into an invisible wall and taking a step backwards...<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Demo</span></span><br />
<br />
<a href="https://app.box.com/s/gqweyt5esn1abpksg9u2n7ncrthzo4h4" target="_blank" rel="noopener" class="mycode_url"><span style="font-weight: bold;" class="mycode_b">CLICK HERE</span></a><br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Script</span></span><br />
<br />
<div class="tborder">
  			<div class="thead" style="padding:4px; margin:1px;"><input type="button" class="button" value="+" style="font-family:Monospace; padding:0px" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].style.display=='none'){ this.parentNode.parentNode.getElementsByTagName('div')[1].style.display='';this.value='-';} else {this.parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.value='+';}"/> FUN STUFF HERE</div>
  			<div class="trow2" style="display:none; padding:4px; margin:1px;"><div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#==============================================================================<br />
# ** Active Bound-Area Events<br />
#&nbsp;&nbsp;&nbsp;&nbsp;Add-On for Expanded Encounter Areas<br />
#------------------------------------------------------------------------------<br />
#&nbsp;&nbsp;&nbsp;&nbsp;by DerVVulfman<br />
#&nbsp;&nbsp;&nbsp;&nbsp;version 1.0<br />
#&nbsp;&nbsp;&nbsp;&nbsp;02-07-2025 (MM-DD-YYYY)<br />
#&nbsp;&nbsp;&nbsp;&nbsp;RGSS / RMXP<br />
#&nbsp;&nbsp;&nbsp;&nbsp;Requires:&nbsp;&nbsp;Expanded Encounter Areas<br />
#==============================================================================<br />
#<br />
#&nbsp;&nbsp;Utilizing the area-defining mechanics&nbsp;&nbsp;of "Expanded Encounter Areas",&nbsp;&nbsp;you<br />
#&nbsp;&nbsp;can now create events that move about randomly, but only within areas which <br />
#&nbsp;&nbsp;you have defined. Monsters may never leave their hunting area,&nbsp;&nbsp;guards may<br />
#&nbsp;&nbsp;be forced to stay&nbsp;&nbsp;within their posts,&nbsp;&nbsp;and a throng of wild party animals<br />
#&nbsp;&nbsp;might find they never leave the opulant dance floor.<br />
#<br />
#&nbsp;&nbsp;Its up to you.<br />
#<br />
#<br />
#------------------------------------------------------------------------------<br />
#&nbsp;&nbsp;<br />
#&nbsp;&nbsp;I will not go into details&nbsp;&nbsp;into how to set up an 'area' where your events<br />
#&nbsp;&nbsp;are to be contained.&nbsp;&nbsp;Instead, I will focus on this script and how to make<br />
#&nbsp;&nbsp;events that are essentially TRAPPED by the areas created with that work.<br />
#<br />
#&nbsp;&nbsp;Okay, setting up an event to be STUCK in an area (or areas).<br />
#<br />
#&nbsp;&nbsp;This is done&nbsp;&nbsp;by adding comments&nbsp;&nbsp;within the&nbsp;&nbsp;'Event commands' window. The<br />
#&nbsp;&nbsp;first comment is one&nbsp;&nbsp;that informs the script&nbsp;&nbsp;that the event is indeed to<br />
#&nbsp;&nbsp;be trapped in an area (or areas).&nbsp;&nbsp;The comment is merely one word,&nbsp;&nbsp;and is<br />
#&nbsp;&nbsp;the word "EEA" by default (no quotes).&nbsp;&nbsp;When I say its 'by default' I mean<br />
#&nbsp;&nbsp;you can change that word in the simple config section of ths script.<br />
#<br />
#&nbsp;&nbsp;But for now, the trigger word that identifies the event as one stuck in an<br />
#&nbsp;&nbsp;area is "EEA". ^_^<br />
#<br />
#&nbsp;&nbsp;Following this,&nbsp;&nbsp;the second comment you add&nbsp;&nbsp;contains the word "EEA_Areas"<br />
#&nbsp;&nbsp;followed by either a number or an array of numbers.&nbsp;&nbsp;The number(s) are the<br />
#&nbsp;&nbsp;ID keys to the "AREA" hashes you have setup in "Expanded Encounter Areas".<br />
#&nbsp;&nbsp;So if you have a comment read "EEA_Areas 4", then the event is stuck with-<br />
#&nbsp;&nbsp;in AREA[4] in your system.&nbsp;&nbsp; And the comment is like "EEA_Areas [5,6,9]", <br />
#&nbsp;&nbsp;then your event will only be able to walk about within those three defined<br />
#&nbsp;&nbsp;areas. Of course, I am going to assume&nbsp;&nbsp;there's some overlap between these<br />
#&nbsp;&nbsp;as the event can't very well HOP distances.<br />
#<br />
#&nbsp;&nbsp;Actually, the JUMP event will work in that instance. ^_^<br />
#<br />
#&nbsp;&nbsp;The last comment is more optional, but understandingly so.&nbsp;&nbsp;It defines the<br />
#&nbsp;&nbsp;way the event behaves&nbsp;&nbsp;when it tries to exit out of the area.&nbsp;&nbsp;By default,<br />
#&nbsp;&nbsp;the event merely backs up (walks backwards) one tile.&nbsp;&nbsp;Otherwise, you have<br />
#&nbsp;&nbsp;access to five other reactions to an attempted area border crossing.<br />
#<br />
#&nbsp;&nbsp;&nbsp;&nbsp;0 = steps backwards 1 tile (default)<br />
#&nbsp;&nbsp;&nbsp;&nbsp;1 = steps backwards 2 tiles<br />
#&nbsp;&nbsp;&nbsp;&nbsp;2 = turns and walks forward 1 tile (away from border)<br />
#&nbsp;&nbsp;&nbsp;&nbsp;3 = turns and walks forward 2 tiles (away from border)<br />
#&nbsp;&nbsp;&nbsp;&nbsp;4 = Walks/Moves to the vent's origin point (may be hindered by objects)<br />
#&nbsp;&nbsp;&nbsp;&nbsp;5 = Appears at the event's origin point&nbsp;&nbsp;<br />
#<br />
#&nbsp;&nbsp;&nbsp;&nbsp;Options 0-3 work best when the event is still 'within' an area. If it<br />
#&nbsp;&nbsp;&nbsp;&nbsp;is outside an area,&nbsp;&nbsp;these may cause the event to be stuck and unable<br />
#&nbsp;&nbsp;&nbsp;&nbsp;to move. Options 4&amp;5 allow events to return to its origin despite the<br />
#&nbsp;&nbsp;&nbsp;&nbsp;area movement limitations.<br />
#<br />
#&nbsp;&nbsp;You may neglect to add&nbsp;&nbsp;the "EEA_Return" comment as it has a default,&nbsp;&nbsp;but<br />
#&nbsp;&nbsp;you do need to add the "EEA" trigger word and the "EEA_Areas" otherwise it<br />
#&nbsp;&nbsp;will not finish defining the event.<br />
#<br />
#<br />
#------------------------------------------------------------------------------<br />
#&nbsp;&nbsp;<br />
#&nbsp;&nbsp;Something you may not have considered.&nbsp;&nbsp;The EEA commands&nbsp;&nbsp;only work within<br />
#&nbsp;&nbsp;event pages where they are defined.&nbsp;&nbsp;That is to say, you can make an event<br />
#&nbsp;&nbsp;with multiple pages, and each page can have its own set of EEA commands to<br />
#&nbsp;&nbsp;control what areas it may traverse, or have pages where they don't exist.<br />
#<br />
#&nbsp;&nbsp;Being able to set different EEA commands or have them non-existent on some<br />
#&nbsp;&nbsp;pages should give you even MORE control than you might have expected!<br />
#<br />
#<br />
#------------------------------------------------------------------------------<br />
#&nbsp;&nbsp;<br />
#&nbsp;&nbsp;The Configuration section (below)&nbsp;&nbsp;is present solely so you can choose the<br />
#&nbsp;&nbsp;words that you use when you create your event.&nbsp;&nbsp;Its only present for those<br />
#&nbsp;&nbsp;who use another language and for their convenience.&nbsp;&nbsp;Otherwise, its hardly<br />
#&nbsp;&nbsp;ever going to get touched.<br />
#<br />
#&nbsp;&nbsp;NOTE:&nbsp;&nbsp; The EEA Trigger word is case sensitive,&nbsp;&nbsp;so it must be exactly the<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;same in your event comments.&nbsp;&nbsp;The others are case inseneitive, and<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do not care if you use upper and/or lowercase characters.<br />
#<br />
#<br />
#==============================================================================<br />
#<br />
#&nbsp;&nbsp;COMPATABILITY:<br />
#<br />
#&nbsp;&nbsp;Designed solely for RPGMaker XP and the Expanded Encounter Areas script.<br />
#<br />
#&nbsp;&nbsp;All contents have been aliased, or had code attached to existing methods<br />
#&nbsp;&nbsp;without rewrites.<br />
#<br />
#<br />
#==============================================================================<br />
#<br />
#&nbsp;&nbsp;TERMS AND CONDITIONS<br />
#<br />
#&nbsp;&nbsp;Free for use, even in commercial projects.&nbsp;&nbsp;Only due credit for myself and<br />
#&nbsp;&nbsp;Ace_V who suggested a like feature is required.<br />
#<br />
#<br />
#==============================================================================<br />
<br />
<br />
<br />
<br />
module EncArea<br />
<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;# The Expanded Encounter Area Trigger<br />
&nbsp;&nbsp;# ===================================<br />
&nbsp;&nbsp;# This word needs to be read first by the system to inform the script that<br />
&nbsp;&nbsp;# the event is an EEA controlled event.&nbsp;&nbsp;The word is case sensitive, so if<br />
&nbsp;&nbsp;# your 'replacement' for EEA has upper and lowercase characters, so too it<br />
&nbsp;&nbsp;# must be in your comments.<br />
&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;EEA_FLAG = "EEA"<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;# The Expanded Areas Array<br />
&nbsp;&nbsp;# ========================<br />
&nbsp;&nbsp;# This word informs the system that it will be followed by either the ID of<br />
&nbsp;&nbsp;# an area defined in the "Expanded Encounter Areas" script,&nbsp;&nbsp;or by an array <br />
&nbsp;&nbsp;# filled with multiple IDs.&nbsp;&nbsp;Unlike the EEA_Flag, it is case insensitive.<br />
&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;AREA_FLAG = "EEA_Areas"<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;# The Expanded Areas Return Type<br />
&nbsp;&nbsp;# ==============================<br />
&nbsp;&nbsp;# This word informs the system that you have chosen the manner in which the<br />
&nbsp;&nbsp;# event will back away and remain within the enclosed area.&nbsp;&nbsp;Again, this is<br />
&nbsp;&nbsp;# also a case insensitive word.<br />
&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;RETURN_FLAG = "EEA_RETURn"<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
end<br />
<br />
<br />
<br />
#==============================================================================<br />
# ** Game_Event<br />
#------------------------------------------------------------------------------<br />
#&nbsp;&nbsp;This class deals with events. It handles functions including event page <br />
#&nbsp;&nbsp;switching via condition determinants, and running parallel process events.<br />
#&nbsp;&nbsp;It's used within the Game_Map class.<br />
#==============================================================================<br />
<br />
class Game_Event &lt; Game_Character<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Alias Listings<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;alias dervv_event_eea_init initialize<br />
&nbsp;&nbsp;alias dervv_event_eea_refresh refresh<br />
&nbsp;&nbsp;alias dervv_event_eea_update update<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Aliased and Attached Methods<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Object Initialization<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; map_id : map ID<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; event&nbsp;&nbsp;: event (RPG::Event)<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def initialize(map_id, event)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;dervv_event_eea_init(map_id, event)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Perform the original method<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Refresh<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def refresh&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;@eea_areas = []&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Clear EEA area IDs<br />
&nbsp;&nbsp;&nbsp;&nbsp;@eea_return = 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Reset EEA return trigger<br />
&nbsp;&nbsp;&nbsp;&nbsp;dervv_event_eea_refresh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Perform the original method<br />
&nbsp;&nbsp;&nbsp;&nbsp;refresh_eea_events(@list)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Perform checks on event<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Determine if Passable (from Game_Character)<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; x : x-coordinate<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; y : y-coordinate<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; d : direction (0,2,4,6,8)<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 0 = Determines if all directions are impassable (for jumping)<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def passable?(x, y, d)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;eea_area_exceeded?(x, y, d)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Test if event exceeds area<br />
&nbsp;&nbsp;&nbsp;&nbsp;return super(x, y, d)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Exit with superclass result<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Frame Update<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def update<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;update_eea_event_return&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Force return on trigger<br />
&nbsp;&nbsp;&nbsp;&nbsp;dervv_event_eea_update&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Perform the original method<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Attached Methods - Direct link to Aliased Methods<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Refresh (when retrieving comment commands)<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; list : list of event commands<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def refresh_eea_events(list)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;return if list.nil?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Exit if there's no cmd list<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;parameters&nbsp;&nbsp;= []&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Create Array for comments<br />
&nbsp;&nbsp;&nbsp;&nbsp;word1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = EncArea::EEA_FLAG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Get EEA word (case sensitive)<br />
&nbsp;&nbsp;&nbsp;&nbsp;word2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = (EncArea::AREA_FLAG).upcase&nbsp;&nbsp; # Get Area array word<br />
&nbsp;&nbsp;&nbsp;&nbsp;word3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = (EncArea::RETURN_FLAG).upcase # Get Event reaction word<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;# Cycle through list<br />
&nbsp;&nbsp;&nbsp;&nbsp;update_eea_event_return&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Force return on trigger<br />
&nbsp;&nbsp;&nbsp;&nbsp;for item in list&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Cycle through the commands<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unless [108, 408].include?(item.code)&nbsp;&nbsp;&nbsp;&nbsp; # If it isn't a comment<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Skip to next item<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parameters.push(item.parameters[0])&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Push item into comment array<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;return if parameters == []&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Exit if no comments<br />
&nbsp;&nbsp;&nbsp;&nbsp;return unless parameters.include?(word1)&nbsp;&nbsp;&nbsp;&nbsp;# Exit if no EEA word/flag<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;for param in parameters&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Cycle through comments<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check = param.split&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Split each comment in two<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next if check[1].nil?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Exit if second half empty<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trigger = check[0].upcase&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Get comment trigger<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if trigger == word2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # If it's an area array trigger<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;refresh_eea_event_area(check[1])&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Obtain area IDs for the event<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if trigger == word3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # If it's a event return trigger<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;refresh_eea_event_return(check[1])&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Obtain return for event<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Determine if Encounter Area exceeded<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; x : x-coordinate<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; y : y-coordinate<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; d : direction (0,2,4,6,8)<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 0 = Determines if all directions are impassable (for jumping)<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def eea_area_exceeded?(x, y, d)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;nx = (x+1) + (d == 6 ? 1 : d == 4 ? -1 : 0) # Get new x coords (start at 1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;ny = (y+1) + (d == 2 ? 1 : d == 8 ? -1 : 0) # Get new y coords (start at 1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;return if @eea_areas.nil?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Exit on invalid areas<br />
&nbsp;&nbsp;&nbsp;&nbsp;return if @eea_areas == []&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Exit if event areas is empty<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;effective = false&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Assume not in a defined area<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;for area in @eea_areas&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Cycle through event's areas<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next if area.nil?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Skip if area is empty<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#36;game_map.eea_map_area?(nx, ny, area)&nbsp;&nbsp;# If the event is IN the area&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;effective = true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Set the effective flag<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;return if effective == true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Exit if still in the area(s)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;@eea_trigger = true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Set trigger - event outside!<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Frame Update (when moving the event back across the border)<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def update_eea_event_return<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;return unless @eea_trigger == true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Exit unless triggered<br />
&nbsp;&nbsp;&nbsp;&nbsp;@eea_trigger = false&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Clear the trigger<br />
&nbsp;&nbsp;&nbsp;&nbsp;eea_event_motion(@eea_return)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Force the event to move<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * New Methods<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Refresh event areas defined<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; value : area list value<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def refresh_eea_event_area(value)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;val = eval(value)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Get evaluated value<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;if val.is_a?(Array)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # If it is an array<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@eea_areas = val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Merely accept the value<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;if val.is_a?(Integer)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # If it is a single integer<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@eea_areas = [val]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Set the value in an array<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Refresh event return condition<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; value : movement return value<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def refresh_eea_event_return(value)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;@eea_return =&nbsp;&nbsp;eval(value).to_i&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Set return to evaluated value<br />
&nbsp;&nbsp;&nbsp;&nbsp;@eea_return = 0 if @eea_return &lt; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Return is no lower than 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;@eea_return = 5 if @eea_return &gt; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Return is no higher than 5<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Perform event movtion based on Encounter area<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; value : movement return value<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def eea_event_motion(value)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;# NOTE: Required 1 additional movement to counter attempted crossing.<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;case value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Branch on move value<br />
&nbsp;&nbsp;&nbsp;&nbsp;when 1 ; eea_b ; eea_b; eea_b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Step backwards twice<br />
&nbsp;&nbsp;&nbsp;&nbsp;when 2 ; turn_180 ; eea_f ; eea_f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Turn &amp; step forward<br />
&nbsp;&nbsp;&nbsp;&nbsp;when 3 ; turn_180 ; eea_f ; eea_f; eea_f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Turn &amp; two steps forward<br />
&nbsp;&nbsp;&nbsp;&nbsp;when 4 ; @x, @y = @event.x, @event.y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Move to origin<br />
&nbsp;&nbsp;&nbsp;&nbsp;when 5 ; moveto(@event.x, @event.y)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Appear at origin<br />
&nbsp;&nbsp;&nbsp;&nbsp;else ;&nbsp;&nbsp; eea_b ; eea_b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Step backwards<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Shortcut to Game_Character: move_backward<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def eea_b<br />
&nbsp;&nbsp;&nbsp;&nbsp;move_backward<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Shortcut to Game_Character: move_forward<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def eea_f<br />
&nbsp;&nbsp;&nbsp;&nbsp;move_forward<br />
&nbsp;&nbsp;end<br />
<br />
end</code></div></div></div>
		</div>
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Instructions</span></span><br />
<br />
Plenty, and in the script. But most of the work is in the parent script this requires.<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Compatibility</span></span><br />
<br />
Designed solely for RPGMaker XP and the <a href="showthread.php?tid=8102"><span style="font-style: italic;" class="mycode_i"><span style="font-weight: bold;" class="mycode_b">Expanded Encounter Areas</span></span></a> script.<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Credits and Thanks</span></span><br />
<br />
Gotta thank Ace_V for giving me the idea.<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Terms and Conditions</span></span><br />
<br />
Free for use, even in commercial projects.  Only due credit for myself and Ace_V who suggested a like feature is required.]]></description>
			<content:encoded><![CDATA[<div align="center"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Active Bound-Area Events</span></span><br />
<span style="font-size: medium;" class="mycode_size">Version: 1.0</span></div>
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Introduction</span></span><br />
<br />
Utilizing the area-defining mechanics  of "Expanded Encounter Areas",  you can now create events that move about randomly, but only within areas which  you have defined. Monsters may never leave their hunting area,  guards may be forced to stay  within their posts,  and a throng of wild party animals might find they never leave the opulant dance floor.<br />
<br />
Its up to you.<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Screenshots</span></span><br />
<br />
Picture a guy running into an invisible wall and taking a step backwards...<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Demo</span></span><br />
<br />
<a href="https://app.box.com/s/gqweyt5esn1abpksg9u2n7ncrthzo4h4" target="_blank" rel="noopener" class="mycode_url"><span style="font-weight: bold;" class="mycode_b">CLICK HERE</span></a><br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Script</span></span><br />
<br />
<div class="tborder">
  			<div class="thead" style="padding:4px; margin:1px;"><input type="button" class="button" value="+" style="font-family:Monospace; padding:0px" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].style.display=='none'){ this.parentNode.parentNode.getElementsByTagName('div')[1].style.display='';this.value='-';} else {this.parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.value='+';}"/> FUN STUFF HERE</div>
  			<div class="trow2" style="display:none; padding:4px; margin:1px;"><div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#==============================================================================<br />
# ** Active Bound-Area Events<br />
#&nbsp;&nbsp;&nbsp;&nbsp;Add-On for Expanded Encounter Areas<br />
#------------------------------------------------------------------------------<br />
#&nbsp;&nbsp;&nbsp;&nbsp;by DerVVulfman<br />
#&nbsp;&nbsp;&nbsp;&nbsp;version 1.0<br />
#&nbsp;&nbsp;&nbsp;&nbsp;02-07-2025 (MM-DD-YYYY)<br />
#&nbsp;&nbsp;&nbsp;&nbsp;RGSS / RMXP<br />
#&nbsp;&nbsp;&nbsp;&nbsp;Requires:&nbsp;&nbsp;Expanded Encounter Areas<br />
#==============================================================================<br />
#<br />
#&nbsp;&nbsp;Utilizing the area-defining mechanics&nbsp;&nbsp;of "Expanded Encounter Areas",&nbsp;&nbsp;you<br />
#&nbsp;&nbsp;can now create events that move about randomly, but only within areas which <br />
#&nbsp;&nbsp;you have defined. Monsters may never leave their hunting area,&nbsp;&nbsp;guards may<br />
#&nbsp;&nbsp;be forced to stay&nbsp;&nbsp;within their posts,&nbsp;&nbsp;and a throng of wild party animals<br />
#&nbsp;&nbsp;might find they never leave the opulant dance floor.<br />
#<br />
#&nbsp;&nbsp;Its up to you.<br />
#<br />
#<br />
#------------------------------------------------------------------------------<br />
#&nbsp;&nbsp;<br />
#&nbsp;&nbsp;I will not go into details&nbsp;&nbsp;into how to set up an 'area' where your events<br />
#&nbsp;&nbsp;are to be contained.&nbsp;&nbsp;Instead, I will focus on this script and how to make<br />
#&nbsp;&nbsp;events that are essentially TRAPPED by the areas created with that work.<br />
#<br />
#&nbsp;&nbsp;Okay, setting up an event to be STUCK in an area (or areas).<br />
#<br />
#&nbsp;&nbsp;This is done&nbsp;&nbsp;by adding comments&nbsp;&nbsp;within the&nbsp;&nbsp;'Event commands' window. The<br />
#&nbsp;&nbsp;first comment is one&nbsp;&nbsp;that informs the script&nbsp;&nbsp;that the event is indeed to<br />
#&nbsp;&nbsp;be trapped in an area (or areas).&nbsp;&nbsp;The comment is merely one word,&nbsp;&nbsp;and is<br />
#&nbsp;&nbsp;the word "EEA" by default (no quotes).&nbsp;&nbsp;When I say its 'by default' I mean<br />
#&nbsp;&nbsp;you can change that word in the simple config section of ths script.<br />
#<br />
#&nbsp;&nbsp;But for now, the trigger word that identifies the event as one stuck in an<br />
#&nbsp;&nbsp;area is "EEA". ^_^<br />
#<br />
#&nbsp;&nbsp;Following this,&nbsp;&nbsp;the second comment you add&nbsp;&nbsp;contains the word "EEA_Areas"<br />
#&nbsp;&nbsp;followed by either a number or an array of numbers.&nbsp;&nbsp;The number(s) are the<br />
#&nbsp;&nbsp;ID keys to the "AREA" hashes you have setup in "Expanded Encounter Areas".<br />
#&nbsp;&nbsp;So if you have a comment read "EEA_Areas 4", then the event is stuck with-<br />
#&nbsp;&nbsp;in AREA[4] in your system.&nbsp;&nbsp; And the comment is like "EEA_Areas [5,6,9]", <br />
#&nbsp;&nbsp;then your event will only be able to walk about within those three defined<br />
#&nbsp;&nbsp;areas. Of course, I am going to assume&nbsp;&nbsp;there's some overlap between these<br />
#&nbsp;&nbsp;as the event can't very well HOP distances.<br />
#<br />
#&nbsp;&nbsp;Actually, the JUMP event will work in that instance. ^_^<br />
#<br />
#&nbsp;&nbsp;The last comment is more optional, but understandingly so.&nbsp;&nbsp;It defines the<br />
#&nbsp;&nbsp;way the event behaves&nbsp;&nbsp;when it tries to exit out of the area.&nbsp;&nbsp;By default,<br />
#&nbsp;&nbsp;the event merely backs up (walks backwards) one tile.&nbsp;&nbsp;Otherwise, you have<br />
#&nbsp;&nbsp;access to five other reactions to an attempted area border crossing.<br />
#<br />
#&nbsp;&nbsp;&nbsp;&nbsp;0 = steps backwards 1 tile (default)<br />
#&nbsp;&nbsp;&nbsp;&nbsp;1 = steps backwards 2 tiles<br />
#&nbsp;&nbsp;&nbsp;&nbsp;2 = turns and walks forward 1 tile (away from border)<br />
#&nbsp;&nbsp;&nbsp;&nbsp;3 = turns and walks forward 2 tiles (away from border)<br />
#&nbsp;&nbsp;&nbsp;&nbsp;4 = Walks/Moves to the vent's origin point (may be hindered by objects)<br />
#&nbsp;&nbsp;&nbsp;&nbsp;5 = Appears at the event's origin point&nbsp;&nbsp;<br />
#<br />
#&nbsp;&nbsp;&nbsp;&nbsp;Options 0-3 work best when the event is still 'within' an area. If it<br />
#&nbsp;&nbsp;&nbsp;&nbsp;is outside an area,&nbsp;&nbsp;these may cause the event to be stuck and unable<br />
#&nbsp;&nbsp;&nbsp;&nbsp;to move. Options 4&amp;5 allow events to return to its origin despite the<br />
#&nbsp;&nbsp;&nbsp;&nbsp;area movement limitations.<br />
#<br />
#&nbsp;&nbsp;You may neglect to add&nbsp;&nbsp;the "EEA_Return" comment as it has a default,&nbsp;&nbsp;but<br />
#&nbsp;&nbsp;you do need to add the "EEA" trigger word and the "EEA_Areas" otherwise it<br />
#&nbsp;&nbsp;will not finish defining the event.<br />
#<br />
#<br />
#------------------------------------------------------------------------------<br />
#&nbsp;&nbsp;<br />
#&nbsp;&nbsp;Something you may not have considered.&nbsp;&nbsp;The EEA commands&nbsp;&nbsp;only work within<br />
#&nbsp;&nbsp;event pages where they are defined.&nbsp;&nbsp;That is to say, you can make an event<br />
#&nbsp;&nbsp;with multiple pages, and each page can have its own set of EEA commands to<br />
#&nbsp;&nbsp;control what areas it may traverse, or have pages where they don't exist.<br />
#<br />
#&nbsp;&nbsp;Being able to set different EEA commands or have them non-existent on some<br />
#&nbsp;&nbsp;pages should give you even MORE control than you might have expected!<br />
#<br />
#<br />
#------------------------------------------------------------------------------<br />
#&nbsp;&nbsp;<br />
#&nbsp;&nbsp;The Configuration section (below)&nbsp;&nbsp;is present solely so you can choose the<br />
#&nbsp;&nbsp;words that you use when you create your event.&nbsp;&nbsp;Its only present for those<br />
#&nbsp;&nbsp;who use another language and for their convenience.&nbsp;&nbsp;Otherwise, its hardly<br />
#&nbsp;&nbsp;ever going to get touched.<br />
#<br />
#&nbsp;&nbsp;NOTE:&nbsp;&nbsp; The EEA Trigger word is case sensitive,&nbsp;&nbsp;so it must be exactly the<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;same in your event comments.&nbsp;&nbsp;The others are case inseneitive, and<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do not care if you use upper and/or lowercase characters.<br />
#<br />
#<br />
#==============================================================================<br />
#<br />
#&nbsp;&nbsp;COMPATABILITY:<br />
#<br />
#&nbsp;&nbsp;Designed solely for RPGMaker XP and the Expanded Encounter Areas script.<br />
#<br />
#&nbsp;&nbsp;All contents have been aliased, or had code attached to existing methods<br />
#&nbsp;&nbsp;without rewrites.<br />
#<br />
#<br />
#==============================================================================<br />
#<br />
#&nbsp;&nbsp;TERMS AND CONDITIONS<br />
#<br />
#&nbsp;&nbsp;Free for use, even in commercial projects.&nbsp;&nbsp;Only due credit for myself and<br />
#&nbsp;&nbsp;Ace_V who suggested a like feature is required.<br />
#<br />
#<br />
#==============================================================================<br />
<br />
<br />
<br />
<br />
module EncArea<br />
<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;# The Expanded Encounter Area Trigger<br />
&nbsp;&nbsp;# ===================================<br />
&nbsp;&nbsp;# This word needs to be read first by the system to inform the script that<br />
&nbsp;&nbsp;# the event is an EEA controlled event.&nbsp;&nbsp;The word is case sensitive, so if<br />
&nbsp;&nbsp;# your 'replacement' for EEA has upper and lowercase characters, so too it<br />
&nbsp;&nbsp;# must be in your comments.<br />
&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;EEA_FLAG = "EEA"<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;# The Expanded Areas Array<br />
&nbsp;&nbsp;# ========================<br />
&nbsp;&nbsp;# This word informs the system that it will be followed by either the ID of<br />
&nbsp;&nbsp;# an area defined in the "Expanded Encounter Areas" script,&nbsp;&nbsp;or by an array <br />
&nbsp;&nbsp;# filled with multiple IDs.&nbsp;&nbsp;Unlike the EEA_Flag, it is case insensitive.<br />
&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;AREA_FLAG = "EEA_Areas"<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;# The Expanded Areas Return Type<br />
&nbsp;&nbsp;# ==============================<br />
&nbsp;&nbsp;# This word informs the system that you have chosen the manner in which the<br />
&nbsp;&nbsp;# event will back away and remain within the enclosed area.&nbsp;&nbsp;Again, this is<br />
&nbsp;&nbsp;# also a case insensitive word.<br />
&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;RETURN_FLAG = "EEA_RETURn"<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
end<br />
<br />
<br />
<br />
#==============================================================================<br />
# ** Game_Event<br />
#------------------------------------------------------------------------------<br />
#&nbsp;&nbsp;This class deals with events. It handles functions including event page <br />
#&nbsp;&nbsp;switching via condition determinants, and running parallel process events.<br />
#&nbsp;&nbsp;It's used within the Game_Map class.<br />
#==============================================================================<br />
<br />
class Game_Event &lt; Game_Character<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Alias Listings<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;alias dervv_event_eea_init initialize<br />
&nbsp;&nbsp;alias dervv_event_eea_refresh refresh<br />
&nbsp;&nbsp;alias dervv_event_eea_update update<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Aliased and Attached Methods<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Object Initialization<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; map_id : map ID<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; event&nbsp;&nbsp;: event (RPG::Event)<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def initialize(map_id, event)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;dervv_event_eea_init(map_id, event)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Perform the original method<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Refresh<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def refresh&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;@eea_areas = []&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Clear EEA area IDs<br />
&nbsp;&nbsp;&nbsp;&nbsp;@eea_return = 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Reset EEA return trigger<br />
&nbsp;&nbsp;&nbsp;&nbsp;dervv_event_eea_refresh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Perform the original method<br />
&nbsp;&nbsp;&nbsp;&nbsp;refresh_eea_events(@list)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Perform checks on event<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Determine if Passable (from Game_Character)<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; x : x-coordinate<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; y : y-coordinate<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; d : direction (0,2,4,6,8)<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 0 = Determines if all directions are impassable (for jumping)<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def passable?(x, y, d)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;eea_area_exceeded?(x, y, d)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Test if event exceeds area<br />
&nbsp;&nbsp;&nbsp;&nbsp;return super(x, y, d)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Exit with superclass result<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Frame Update<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def update<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;update_eea_event_return&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Force return on trigger<br />
&nbsp;&nbsp;&nbsp;&nbsp;dervv_event_eea_update&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Perform the original method<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Attached Methods - Direct link to Aliased Methods<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Refresh (when retrieving comment commands)<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; list : list of event commands<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def refresh_eea_events(list)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;return if list.nil?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Exit if there's no cmd list<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;parameters&nbsp;&nbsp;= []&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Create Array for comments<br />
&nbsp;&nbsp;&nbsp;&nbsp;word1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = EncArea::EEA_FLAG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Get EEA word (case sensitive)<br />
&nbsp;&nbsp;&nbsp;&nbsp;word2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = (EncArea::AREA_FLAG).upcase&nbsp;&nbsp; # Get Area array word<br />
&nbsp;&nbsp;&nbsp;&nbsp;word3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = (EncArea::RETURN_FLAG).upcase # Get Event reaction word<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;# Cycle through list<br />
&nbsp;&nbsp;&nbsp;&nbsp;update_eea_event_return&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Force return on trigger<br />
&nbsp;&nbsp;&nbsp;&nbsp;for item in list&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Cycle through the commands<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unless [108, 408].include?(item.code)&nbsp;&nbsp;&nbsp;&nbsp; # If it isn't a comment<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Skip to next item<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parameters.push(item.parameters[0])&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Push item into comment array<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;return if parameters == []&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Exit if no comments<br />
&nbsp;&nbsp;&nbsp;&nbsp;return unless parameters.include?(word1)&nbsp;&nbsp;&nbsp;&nbsp;# Exit if no EEA word/flag<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;for param in parameters&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Cycle through comments<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;check = param.split&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Split each comment in two<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next if check[1].nil?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Exit if second half empty<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trigger = check[0].upcase&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Get comment trigger<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if trigger == word2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # If it's an area array trigger<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;refresh_eea_event_area(check[1])&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Obtain area IDs for the event<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if trigger == word3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # If it's a event return trigger<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;refresh_eea_event_return(check[1])&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Obtain return for event<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Determine if Encounter Area exceeded<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; x : x-coordinate<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; y : y-coordinate<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; d : direction (0,2,4,6,8)<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 0 = Determines if all directions are impassable (for jumping)<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def eea_area_exceeded?(x, y, d)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;nx = (x+1) + (d == 6 ? 1 : d == 4 ? -1 : 0) # Get new x coords (start at 1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;ny = (y+1) + (d == 2 ? 1 : d == 8 ? -1 : 0) # Get new y coords (start at 1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;return if @eea_areas.nil?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Exit on invalid areas<br />
&nbsp;&nbsp;&nbsp;&nbsp;return if @eea_areas == []&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Exit if event areas is empty<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;effective = false&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Assume not in a defined area<br />
&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;for area in @eea_areas&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Cycle through event's areas<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next if area.nil?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Skip if area is empty<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if &#36;game_map.eea_map_area?(nx, ny, area)&nbsp;&nbsp;# If the event is IN the area&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;effective = true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Set the effective flag<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;return if effective == true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Exit if still in the area(s)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;@eea_trigger = true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Set trigger - event outside!<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Frame Update (when moving the event back across the border)<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def update_eea_event_return<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;return unless @eea_trigger == true&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Exit unless triggered<br />
&nbsp;&nbsp;&nbsp;&nbsp;@eea_trigger = false&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Clear the trigger<br />
&nbsp;&nbsp;&nbsp;&nbsp;eea_event_motion(@eea_return)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Force the event to move<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * New Methods<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Refresh event areas defined<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; value : area list value<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def refresh_eea_event_area(value)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;val = eval(value)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Get evaluated value<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;if val.is_a?(Array)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # If it is an array<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@eea_areas = val&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Merely accept the value<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;if val.is_a?(Integer)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # If it is a single integer<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@eea_areas = [val]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Set the value in an array<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Refresh event return condition<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; value : movement return value<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def refresh_eea_event_return(value)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;@eea_return =&nbsp;&nbsp;eval(value).to_i&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Set return to evaluated value<br />
&nbsp;&nbsp;&nbsp;&nbsp;@eea_return = 0 if @eea_return &lt; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Return is no lower than 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;@eea_return = 5 if @eea_return &gt; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Return is no higher than 5<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Perform event movtion based on Encounter area<br />
&nbsp;&nbsp;#&nbsp;&nbsp;&nbsp;&nbsp; value : movement return value<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def eea_event_motion(value)<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;# NOTE: Required 1 additional movement to counter attempted crossing.<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;&nbsp;&nbsp;case value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Branch on move value<br />
&nbsp;&nbsp;&nbsp;&nbsp;when 1 ; eea_b ; eea_b; eea_b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Step backwards twice<br />
&nbsp;&nbsp;&nbsp;&nbsp;when 2 ; turn_180 ; eea_f ; eea_f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Turn &amp; step forward<br />
&nbsp;&nbsp;&nbsp;&nbsp;when 3 ; turn_180 ; eea_f ; eea_f; eea_f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Turn &amp; two steps forward<br />
&nbsp;&nbsp;&nbsp;&nbsp;when 4 ; @x, @y = @event.x, @event.y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Move to origin<br />
&nbsp;&nbsp;&nbsp;&nbsp;when 5 ; moveto(@event.x, @event.y)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Appear at origin<br />
&nbsp;&nbsp;&nbsp;&nbsp;else ;&nbsp;&nbsp; eea_b ; eea_b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Step backwards<br />
&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;#<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Shortcut to Game_Character: move_backward<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def eea_b<br />
&nbsp;&nbsp;&nbsp;&nbsp;move_backward<br />
&nbsp;&nbsp;end<br />
<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;# * Shortcut to Game_Character: move_forward<br />
&nbsp;&nbsp;#--------------------------------------------------------------------------<br />
&nbsp;&nbsp;def eea_f<br />
&nbsp;&nbsp;&nbsp;&nbsp;move_forward<br />
&nbsp;&nbsp;end<br />
<br />
end</code></div></div></div>
		</div>
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Instructions</span></span><br />
<br />
Plenty, and in the script. But most of the work is in the parent script this requires.<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Compatibility</span></span><br />
<br />
Designed solely for RPGMaker XP and the <a href="showthread.php?tid=8102"><span style="font-style: italic;" class="mycode_i"><span style="font-weight: bold;" class="mycode_b">Expanded Encounter Areas</span></span></a> script.<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Credits and Thanks</span></span><br />
<br />
Gotta thank Ace_V for giving me the idea.<br />
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Terms and Conditions</span></span><br />
<br />
Free for use, even in commercial projects.  Only due credit for myself and Ace_V who suggested a like feature is required.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[BattleAktionFX XP]]></title>
			<link>https://www.save-point.org/thread-13371.html</link>
			<pubDate>Sat, 27 Dec 2025 12:55:45 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.save-point.org/member.php?action=profile&uid=1471">kyonides</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.save-point.org/thread-13371.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">BattleAktionFX XP</span></span></div>
<br />
<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">by Kyonides</span></span></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Introduction</span><br />
<br />
After reading lots of stuff on Discord on some Follow Up Skill script for VX ACE, I thought XP badly needed to get something like that. This is how this script came into existence! <img src="https://www.save-point.org/images/smilies/ejlol/shocked.gif" alt="Shocked" title="Shocked" class="smilie smilie_22" /><br />
<br />
Currently, there are 4 options available:<ul class="mycode_list"><li>:repeat for repeating the skill cast a few moments ago.<br />
</li>
<li>:random_skill for picking a skill from the current actor's or enemy's list of available skills / action.<br />
</li>
<li>:foe_skill for choosing a skill from an opponent's list of available skills / actions.<br />
</li>
<li>Some predefined skill ID - it might fail if the battler doesn't know it.<br />
</li>
<li>nil - it means nothing in Latin.<br />
</li>
</ul>
<br />
To add a new skill to the list, follow this example here:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>SKILL_FX[57] = [:repeat, :random_skill]</code></div></div><br />
57 would stand for the actual skill ID.<br />
<br />
During gameplay, the script will pick one of those options randomly, unless there's just 0 or 1 there.<br />
<br />
And yes, <img src="https://www.save-point.org/images/smilies/ejlol/ghost.gif" alt="Ghost" title="Ghost" class="smilie smilie_86" /> <img src="https://www.save-point.org/images/smilies/ejlol/golem.gif" alt="Golem" title="Golem" class="smilie smilie_172" /> enemies might escape or guard or do nothing if they got no valid action to perform at that point.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">The Script</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># * BattleAktionFX XP * #<br />
#   Scripter : Kyonides<br />
#   v0.5.0 - 2025-12-29<br />
<br />
# Let your actors or troopers get an extra action for certain skills<br />
# IF AND ONLY IF they meet some of the predefined criteria.<br />
<br />
# Warning!<br />
# Enemies using a skill's effect might escape or guard if they've got<br />
# no available action left!<br />
<br />
# Available Options:<br />
# :repeat, :random_skill, :foe_skill, a specific skill ID, nil<br />
<br />
module BAktionFX<br />
  MAX_EXTRA_ACTIONS = 1<br />
  SKILL_FX = {} # Please leave this line alone!<br />
  SKILL_FX.default = [] # Please leave this line alone!<br />
  # [Skill ID] = [Option1, etc.]<br />
  SKILL_FX[57] = [:repeat, :random_skill]<br />
  extend self<br />
  def set_make_targets(set_targets)<br />
    @set_targets = set_targets<br />
  end<br />
<br />
  def skip?<br />
    MAX_EXTRA_ACTIONS == @extra_actions or @skill_hits == 0<br />
  end<br />
<br />
  def process_skill(battler, skill_id)<br />
    if skip?<br />
      clear<br />
      return<br />
    end<br />
    action = battler.current_action<br />
    fx = SKILL_FX[skill_id]<br />
    slots = fx.size<br />
    fx = fx[rand(slots)]<br />
    case fx<br />
    when nil<br />
      clear<br />
      return<br />
    when :repeat<br />
      kind, basic, fx = action.data<br />
    when :random_skill<br />
      kind, basic, fx = battler.find_extra_action<br />
    when :foe_skill<br />
      kind, basic, fx = battler.find_foe_action<br />
    end<br />
    skill = &#36;data_skills[fx]<br />
    unless skill<br />
      clear<br />
      return<br />
    end<br />
    @set_targets.call(skill.scope)<br />
    @targets = @targets.call.flatten<br />
    if @targets.empty?<br />
      clear<br />
      return<br />
    end<br />
    @targets = nil<br />
    @extra_actions += 1<br />
    @skill_hits = 0<br />
    action.set(kind, basic, fx)<br />
    true<br />
  end<br />
<br />
  def clear<br />
    @skill_hits = @extra_actions = 0<br />
  end<br />
  attr_accessor :extra_actions, :skill_hits, :targets<br />
end<br />
<br />
class Game_BattleAction<br />
  def data<br />
    [@kind, @basic, @skill_id]<br />
  end<br />
<br />
  def set(akind, abasic, askill_id)<br />
    @kind = akind<br />
    @basic = abasic<br />
    @skill_id = askill_id<br />
  end<br />
end<br />
<br />
class Game_Battler<br />
  alias :kyon_btl_akt_fx_gm_btlr_sk_fx :skill_effect<br />
  def skill_effect(user, skill)<br />
    result = kyon_btl_akt_fx_gm_btlr_sk_fx(user, skill)<br />
    BAktionFX.skill_hits += 1 if result and @damage.is_a?(Integer)<br />
    result<br />
  end<br />
<br />
  def set_opponent_action(foes)<br />
    return [0, rand(3) + 1, 0] if foes.empty?<br />
    total = foes.size<br />
    foe = foes[rand(total)]<br />
    foe.find_extra_action<br />
  end<br />
<br />
  def skill_can_use_extra?(skill)<br />
    return false if dead? or skill.sp_cost &gt; self.sp<br />
    return false if skill.atk_f == 0 and self.restriction == 1<br />
    skill.occasion &lt; 2 and rand(100) &lt; 50<br />
  end<br />
  attr_accessor :extra_action<br />
end<br />
<br />
class Game_Actor<br />
  def find_extra_action<br />
    skills_found = @skills.select {|sid| skill_can_use?(sid) }<br />
    total = skills_found.size<br />
    skill_id = skills_found[rand(total)]<br />
    [1, 0, skill_id]<br />
  end<br />
<br />
  def find_foe_action<br />
    foes = &#36;game_troop.enemies.select {|e| e.exist? }<br />
    set_opponent_action(foes)<br />
  end<br />
end<br />
<br />
class Game_Enemy<br />
  def find_extra_action<br />
    return [0, rand(3) + 1, 0] unless movable?<br />
    found_actions = []<br />
    for action in self.actions<br />
      n = &#36;game_temp.battle_turn<br />
      a = action.condition_turn_a<br />
      b = action.condition_turn_b<br />
      if (b == 0 and n != a) or<br />
         (b &gt; 0 and (n &lt; 1 or n &lt; a or n % b != a % b))<br />
        next<br />
      end<br />
      if self.hp * 100.0 / self.maxhp &gt; action.condition_hp<br />
        next<br />
      end<br />
      if &#36;game_party.max_level &lt; action.condition_level<br />
        next<br />
      end<br />
      switch_id = action.condition_switch_id<br />
      if switch_id &gt; 0 and !&#36;game_switches[switch_id]<br />
        next<br />
      end<br />
      found_actions &lt;&lt; action<br />
    end<br />
    return [] if found_actions.empty?<br />
    total = found_actions.size<br />
    action = found_actions[rand(total)]<br />
    action.data<br />
  end<br />
<br />
  def find_foe_action<br />
    foes = &#36;game_party.actors.select {|e| e.exist? }<br />
    set_opponent_action(foes)<br />
  end<br />
end<br />
<br />
class Scene_Battle<br />
  alias :kyon_btl_akt_fx_scn_btl_stt_ph4 :start_phase4<br />
  alias :kyon_btl_akt_fx_scn_btl_mk_sk_act_res :make_skill_action_result<br />
  alias :kyon_btl_akt_fx_scn_btl_up_ph4_st6 :update_phase4_step6<br />
  alias :kyon_btl_akt_fx_scn_btl_btl_end :battle_end<br />
  def start_phase4<br />
    BAktionFX.clear<br />
    @used_skill = nil<br />
    kyon_btl_akt_fx_scn_btl_stt_ph4<br />
  end<br />
<br />
  def make_skill_action_result<br />
    if @active_battler.extra_action<br />
      make_extra_skill_action_result<br />
    else<br />
      kyon_btl_akt_fx_scn_btl_mk_sk_act_res<br />
    end<br />
    @used_skill = @phase4_step != 1<br />
  end<br />
<br />
  def make_extra_skill_action_result<br />
    @skill = &#36;data_skills[@active_battler.current_action.skill_id]<br />
    unless @active_battler.current_action.forcing<br />
      unless @active_battler.skill_can_use_extra?(@skill)<br />
        &#36;game_temp.forcing_battler = nil<br />
        @phase4_step = 1<br />
        return<br />
      end<br />
    end<br />
    @active_battler.sp -= @skill.sp_cost<br />
    @status_window.refresh<br />
    @help_window.set_text(@skill.name, 1)<br />
    @animation1_id = @skill.animation1_id<br />
    @animation2_id = @skill.animation2_id<br />
    @common_event_id = @skill.common_event_id<br />
    set_target_battlers(@skill.scope)<br />
    for target in @target_battlers<br />
      target.skill_effect(@active_battler, @skill)<br />
    end<br />
  end<br />
<br />
  def update_phase4_step6<br />
    kyon_btl_akt_fx_scn_btl_up_ph4_st6<br />
    @active_battler.extra_action = nil<br />
    return unless @used_skill<br />
    @target_battlers = []<br />
    BAktionFX.targets = @target_battlers<br />
    unless @embedded<br />
      BAktionFX.set_make_targets(method(:set_target_battlers))<br />
      @embedded = true<br />
    end<br />
    if BAktionFX.process_skill(@active_battler, @skill.id)<br />
      @action_battlers.unshift @active_battler <br />
      @active_battler.extra_action = true<br />
    end<br />
    @target_battlers = []<br />
    @used_skill = nil<br />
  end<br />
<br />
  def battle_end(result)<br />
    BAktionFX.clear<br />
    kyon_btl_akt_fx_scn_btl_btl_end(result)<br />
  end<br />
end</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Terms &amp; Conditions</span><br />
<br />
Free as in <img src="https://www.save-point.org/images/smilies/ejlol/beer.gif" alt="Beer" title="Beer" class="smilie smilie_189" /> beer.<br />
Please include me in your game credits.<br />
That's it! <img src="https://www.save-point.org/images/smilies/ejlol/tongue.gif" alt="Tongue sticking out" title="Tongue sticking out" class="smilie smilie_24" />]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">BattleAktionFX XP</span></span></div>
<br />
<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">by Kyonides</span></span></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Introduction</span><br />
<br />
After reading lots of stuff on Discord on some Follow Up Skill script for VX ACE, I thought XP badly needed to get something like that. This is how this script came into existence! <img src="https://www.save-point.org/images/smilies/ejlol/shocked.gif" alt="Shocked" title="Shocked" class="smilie smilie_22" /><br />
<br />
Currently, there are 4 options available:<ul class="mycode_list"><li>:repeat for repeating the skill cast a few moments ago.<br />
</li>
<li>:random_skill for picking a skill from the current actor's or enemy's list of available skills / action.<br />
</li>
<li>:foe_skill for choosing a skill from an opponent's list of available skills / actions.<br />
</li>
<li>Some predefined skill ID - it might fail if the battler doesn't know it.<br />
</li>
<li>nil - it means nothing in Latin.<br />
</li>
</ul>
<br />
To add a new skill to the list, follow this example here:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>SKILL_FX[57] = [:repeat, :random_skill]</code></div></div><br />
57 would stand for the actual skill ID.<br />
<br />
During gameplay, the script will pick one of those options randomly, unless there's just 0 or 1 there.<br />
<br />
And yes, <img src="https://www.save-point.org/images/smilies/ejlol/ghost.gif" alt="Ghost" title="Ghost" class="smilie smilie_86" /> <img src="https://www.save-point.org/images/smilies/ejlol/golem.gif" alt="Golem" title="Golem" class="smilie smilie_172" /> enemies might escape or guard or do nothing if they got no valid action to perform at that point.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">The Script</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># * BattleAktionFX XP * #<br />
#   Scripter : Kyonides<br />
#   v0.5.0 - 2025-12-29<br />
<br />
# Let your actors or troopers get an extra action for certain skills<br />
# IF AND ONLY IF they meet some of the predefined criteria.<br />
<br />
# Warning!<br />
# Enemies using a skill's effect might escape or guard if they've got<br />
# no available action left!<br />
<br />
# Available Options:<br />
# :repeat, :random_skill, :foe_skill, a specific skill ID, nil<br />
<br />
module BAktionFX<br />
  MAX_EXTRA_ACTIONS = 1<br />
  SKILL_FX = {} # Please leave this line alone!<br />
  SKILL_FX.default = [] # Please leave this line alone!<br />
  # [Skill ID] = [Option1, etc.]<br />
  SKILL_FX[57] = [:repeat, :random_skill]<br />
  extend self<br />
  def set_make_targets(set_targets)<br />
    @set_targets = set_targets<br />
  end<br />
<br />
  def skip?<br />
    MAX_EXTRA_ACTIONS == @extra_actions or @skill_hits == 0<br />
  end<br />
<br />
  def process_skill(battler, skill_id)<br />
    if skip?<br />
      clear<br />
      return<br />
    end<br />
    action = battler.current_action<br />
    fx = SKILL_FX[skill_id]<br />
    slots = fx.size<br />
    fx = fx[rand(slots)]<br />
    case fx<br />
    when nil<br />
      clear<br />
      return<br />
    when :repeat<br />
      kind, basic, fx = action.data<br />
    when :random_skill<br />
      kind, basic, fx = battler.find_extra_action<br />
    when :foe_skill<br />
      kind, basic, fx = battler.find_foe_action<br />
    end<br />
    skill = &#36;data_skills[fx]<br />
    unless skill<br />
      clear<br />
      return<br />
    end<br />
    @set_targets.call(skill.scope)<br />
    @targets = @targets.call.flatten<br />
    if @targets.empty?<br />
      clear<br />
      return<br />
    end<br />
    @targets = nil<br />
    @extra_actions += 1<br />
    @skill_hits = 0<br />
    action.set(kind, basic, fx)<br />
    true<br />
  end<br />
<br />
  def clear<br />
    @skill_hits = @extra_actions = 0<br />
  end<br />
  attr_accessor :extra_actions, :skill_hits, :targets<br />
end<br />
<br />
class Game_BattleAction<br />
  def data<br />
    [@kind, @basic, @skill_id]<br />
  end<br />
<br />
  def set(akind, abasic, askill_id)<br />
    @kind = akind<br />
    @basic = abasic<br />
    @skill_id = askill_id<br />
  end<br />
end<br />
<br />
class Game_Battler<br />
  alias :kyon_btl_akt_fx_gm_btlr_sk_fx :skill_effect<br />
  def skill_effect(user, skill)<br />
    result = kyon_btl_akt_fx_gm_btlr_sk_fx(user, skill)<br />
    BAktionFX.skill_hits += 1 if result and @damage.is_a?(Integer)<br />
    result<br />
  end<br />
<br />
  def set_opponent_action(foes)<br />
    return [0, rand(3) + 1, 0] if foes.empty?<br />
    total = foes.size<br />
    foe = foes[rand(total)]<br />
    foe.find_extra_action<br />
  end<br />
<br />
  def skill_can_use_extra?(skill)<br />
    return false if dead? or skill.sp_cost &gt; self.sp<br />
    return false if skill.atk_f == 0 and self.restriction == 1<br />
    skill.occasion &lt; 2 and rand(100) &lt; 50<br />
  end<br />
  attr_accessor :extra_action<br />
end<br />
<br />
class Game_Actor<br />
  def find_extra_action<br />
    skills_found = @skills.select {|sid| skill_can_use?(sid) }<br />
    total = skills_found.size<br />
    skill_id = skills_found[rand(total)]<br />
    [1, 0, skill_id]<br />
  end<br />
<br />
  def find_foe_action<br />
    foes = &#36;game_troop.enemies.select {|e| e.exist? }<br />
    set_opponent_action(foes)<br />
  end<br />
end<br />
<br />
class Game_Enemy<br />
  def find_extra_action<br />
    return [0, rand(3) + 1, 0] unless movable?<br />
    found_actions = []<br />
    for action in self.actions<br />
      n = &#36;game_temp.battle_turn<br />
      a = action.condition_turn_a<br />
      b = action.condition_turn_b<br />
      if (b == 0 and n != a) or<br />
         (b &gt; 0 and (n &lt; 1 or n &lt; a or n % b != a % b))<br />
        next<br />
      end<br />
      if self.hp * 100.0 / self.maxhp &gt; action.condition_hp<br />
        next<br />
      end<br />
      if &#36;game_party.max_level &lt; action.condition_level<br />
        next<br />
      end<br />
      switch_id = action.condition_switch_id<br />
      if switch_id &gt; 0 and !&#36;game_switches[switch_id]<br />
        next<br />
      end<br />
      found_actions &lt;&lt; action<br />
    end<br />
    return [] if found_actions.empty?<br />
    total = found_actions.size<br />
    action = found_actions[rand(total)]<br />
    action.data<br />
  end<br />
<br />
  def find_foe_action<br />
    foes = &#36;game_party.actors.select {|e| e.exist? }<br />
    set_opponent_action(foes)<br />
  end<br />
end<br />
<br />
class Scene_Battle<br />
  alias :kyon_btl_akt_fx_scn_btl_stt_ph4 :start_phase4<br />
  alias :kyon_btl_akt_fx_scn_btl_mk_sk_act_res :make_skill_action_result<br />
  alias :kyon_btl_akt_fx_scn_btl_up_ph4_st6 :update_phase4_step6<br />
  alias :kyon_btl_akt_fx_scn_btl_btl_end :battle_end<br />
  def start_phase4<br />
    BAktionFX.clear<br />
    @used_skill = nil<br />
    kyon_btl_akt_fx_scn_btl_stt_ph4<br />
  end<br />
<br />
  def make_skill_action_result<br />
    if @active_battler.extra_action<br />
      make_extra_skill_action_result<br />
    else<br />
      kyon_btl_akt_fx_scn_btl_mk_sk_act_res<br />
    end<br />
    @used_skill = @phase4_step != 1<br />
  end<br />
<br />
  def make_extra_skill_action_result<br />
    @skill = &#36;data_skills[@active_battler.current_action.skill_id]<br />
    unless @active_battler.current_action.forcing<br />
      unless @active_battler.skill_can_use_extra?(@skill)<br />
        &#36;game_temp.forcing_battler = nil<br />
        @phase4_step = 1<br />
        return<br />
      end<br />
    end<br />
    @active_battler.sp -= @skill.sp_cost<br />
    @status_window.refresh<br />
    @help_window.set_text(@skill.name, 1)<br />
    @animation1_id = @skill.animation1_id<br />
    @animation2_id = @skill.animation2_id<br />
    @common_event_id = @skill.common_event_id<br />
    set_target_battlers(@skill.scope)<br />
    for target in @target_battlers<br />
      target.skill_effect(@active_battler, @skill)<br />
    end<br />
  end<br />
<br />
  def update_phase4_step6<br />
    kyon_btl_akt_fx_scn_btl_up_ph4_st6<br />
    @active_battler.extra_action = nil<br />
    return unless @used_skill<br />
    @target_battlers = []<br />
    BAktionFX.targets = @target_battlers<br />
    unless @embedded<br />
      BAktionFX.set_make_targets(method(:set_target_battlers))<br />
      @embedded = true<br />
    end<br />
    if BAktionFX.process_skill(@active_battler, @skill.id)<br />
      @action_battlers.unshift @active_battler <br />
      @active_battler.extra_action = true<br />
    end<br />
    @target_battlers = []<br />
    @used_skill = nil<br />
  end<br />
<br />
  def battle_end(result)<br />
    BAktionFX.clear<br />
    kyon_btl_akt_fx_scn_btl_btl_end(result)<br />
  end<br />
end</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Terms &amp; Conditions</span><br />
<br />
Free as in <img src="https://www.save-point.org/images/smilies/ejlol/beer.gif" alt="Beer" title="Beer" class="smilie smilie_189" /> beer.<br />
Please include me in your game credits.<br />
That's it! <img src="https://www.save-point.org/images/smilies/ejlol/tongue.gif" alt="Tongue sticking out" title="Tongue sticking out" class="smilie smilie_24" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[KReviveOnce XP]]></title>
			<link>https://www.save-point.org/thread-13346.html</link>
			<pubDate>Wed, 10 Dec 2025 17:39:06 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.save-point.org/member.php?action=profile&uid=1471">kyonides</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.save-point.org/thread-13346.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">KReviveOnce XP</span></span></div>
<br />
<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">by Kyonides</span></span></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Introduction</span><br />
<br />
Sometimes your heroes deserve a second chance to defeat that terrible mega boss. Or you might simply think that their story should not end because they were just too weak after an epic battle as to also <img src="https://www.save-point.org/images/smilies/ejlol/worried.gif" alt="Worried" title="Worried" class="smilie smilie_216" /> worry about facing a couple of slimes right away.<br />
<br />
No matter what your excuse might be, now your heroes can be automatically revived once!<br />
<br />
Just set a specific state ID and the HP percentage they will recover and that's it!<br />
<br />
<img src="https://www.save-point.org/images/smilies/ejlol/sweathappy.gif" alt="Happy with a sweat" title="Happy with a sweat" class="smilie smilie_31" /> Of course, if a given hero dies without having that state listed at that critical moment, it's <img src="https://www.save-point.org/images/smilies/ejlol/skull.gif" alt="Skull" title="Skull" class="smilie smilie_214" /> game over for him or her! <img src="https://www.save-point.org/images/smilies/ejlol/laughing.gif" alt="Laughing" title="Laughing" class="smilie smilie_23" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">The Script</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># * KReviveOnce XP * #<br />
#  Scripter : Kyonides<br />
#  2025-12-10<br />
<br />
# Let your heroes revive ONCE if they got a very specific state before<br />
# they met their premature demises.<br />
<br />
module KRevive<br />
  ONCE_STATE_ID = 25<br />
  ONCE_STATE_PERC = 25<br />
end<br />
<br />
class Game_Battler<br />
  alias :kyon_revive_once_gm_btlr_remove_state :remove_state<br />
  def check_revive_once(state_id)<br />
    @can_revive = (KRevive::ONCE_STATE_ID == state_id and state?(state_id))<br />
  end<br />
<br />
  def remove_state(state_id, force=false)<br />
    check_revive_once(state_id)<br />
    kyon_revive_once_gm_btlr_remove_state(state_id, force)<br />
    apply_revive_once<br />
  end<br />
<br />
  def apply_revive_once<br />
    if @can_revive and !state?(KRevive::ONCE_STATE_ID) and @hp &lt; 2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@states.delete(1)<br />
      @hp = maxhp * KRevive::ONCE_STATE_PERC<br />
    end<br />
    @can_revive = nil<br />
  end<br />
end</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Terms &amp; Conditions</span><br />
<br />
Free as in <img src="https://www.save-point.org/images/smilies/ejlol/beer.gif" alt="Beer" title="Beer" class="smilie smilie_189" /> beer.<br />
Include me in your game credits.<br />
That's it! <img src="https://www.save-point.org/images/smilies/ejlol/tongue.gif" alt="Tongue sticking out" title="Tongue sticking out" class="smilie smilie_24" />]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">KReviveOnce XP</span></span></div>
<br />
<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">by Kyonides</span></span></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Introduction</span><br />
<br />
Sometimes your heroes deserve a second chance to defeat that terrible mega boss. Or you might simply think that their story should not end because they were just too weak after an epic battle as to also <img src="https://www.save-point.org/images/smilies/ejlol/worried.gif" alt="Worried" title="Worried" class="smilie smilie_216" /> worry about facing a couple of slimes right away.<br />
<br />
No matter what your excuse might be, now your heroes can be automatically revived once!<br />
<br />
Just set a specific state ID and the HP percentage they will recover and that's it!<br />
<br />
<img src="https://www.save-point.org/images/smilies/ejlol/sweathappy.gif" alt="Happy with a sweat" title="Happy with a sweat" class="smilie smilie_31" /> Of course, if a given hero dies without having that state listed at that critical moment, it's <img src="https://www.save-point.org/images/smilies/ejlol/skull.gif" alt="Skull" title="Skull" class="smilie smilie_214" /> game over for him or her! <img src="https://www.save-point.org/images/smilies/ejlol/laughing.gif" alt="Laughing" title="Laughing" class="smilie smilie_23" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">The Script</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># * KReviveOnce XP * #<br />
#  Scripter : Kyonides<br />
#  2025-12-10<br />
<br />
# Let your heroes revive ONCE if they got a very specific state before<br />
# they met their premature demises.<br />
<br />
module KRevive<br />
  ONCE_STATE_ID = 25<br />
  ONCE_STATE_PERC = 25<br />
end<br />
<br />
class Game_Battler<br />
  alias :kyon_revive_once_gm_btlr_remove_state :remove_state<br />
  def check_revive_once(state_id)<br />
    @can_revive = (KRevive::ONCE_STATE_ID == state_id and state?(state_id))<br />
  end<br />
<br />
  def remove_state(state_id, force=false)<br />
    check_revive_once(state_id)<br />
    kyon_revive_once_gm_btlr_remove_state(state_id, force)<br />
    apply_revive_once<br />
  end<br />
<br />
  def apply_revive_once<br />
    if @can_revive and !state?(KRevive::ONCE_STATE_ID) and @hp &lt; 2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@states.delete(1)<br />
      @hp = maxhp * KRevive::ONCE_STATE_PERC<br />
    end<br />
    @can_revive = nil<br />
  end<br />
end</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Terms &amp; Conditions</span><br />
<br />
Free as in <img src="https://www.save-point.org/images/smilies/ejlol/beer.gif" alt="Beer" title="Beer" class="smilie smilie_189" /> beer.<br />
Include me in your game credits.<br />
That's it! <img src="https://www.save-point.org/images/smilies/ejlol/tongue.gif" alt="Tongue sticking out" title="Tongue sticking out" class="smilie smilie_24" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Hex Colors RG]]></title>
			<link>https://www.save-point.org/thread-13315.html</link>
			<pubDate>Tue, 18 Nov 2025 07:02:54 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.save-point.org/member.php?action=profile&uid=1471">kyonides</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.save-point.org/thread-13315.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Hex Colors RG</span></span></div>
<br />
<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">by Kyonides</span></span></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Introduction</span><br />
<br />
I'm back to leave you another scriptlet that will allow you to use hex colors in your windows and sprites with ease.<br />
<br />
This code will work on RMXP, RMVX and even RMVX ACE! <img src="https://www.save-point.org/images/smilies/ejlol/shocked.gif" alt="Shocked" title="Shocked" class="smilie smilie_22" /><br />
<br />
Just use it like this:<br />
<br />
For Windows:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>self.contents.font.color = hex_color("FF00FF")</code></div></div><br />
For Sprites:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>self.bitmap.font.color = hex_color("FF00FF")</code></div></div><br />
In this particular case, your text will become purple-ish! <img src="https://www.save-point.org/images/smilies/ejlol/virus.gif" alt="Virus" title="Virus" class="smilie smilie_75" /> <br />
<br />
You can also add 2 extra characters to set the alpha value of your custom color manually.<br />
<br />
In both cases you can add the # pound sign at the beginning of the string, but it's not mandatory.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">The Script</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># * Hex Colors RG * # <br />
#  Scripter : Kyonides<br />
#  2025-11-18<br />
<br />
module Hex<br />
  def hex_color(hex)<br />
    digits = hex.size<br />
    hex.sub!("#", "")<br />
    red = hex[0, 2].to_i(16)<br />
    green = hex[2, 2].to_i(16)<br />
    blue = hex[4, 2].to_i(16)<br />
    alpha = digits == 8 ? hex[6, 2] : 255<br />
    Color.new(red, green, blue, alpha)<br />
  end<br />
end<br />
<br />
class Window_Base<br />
  include Hex<br />
end<br />
<br />
class Sprite<br />
  include Hex<br />
end</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Terms &amp; Conditions</span><br />
<br />
It's free as in <img src="https://www.save-point.org/images/smilies/ejlol/beer.gif" alt="Beer" title="Beer" class="smilie smilie_189" /> beer. That's all you need to know. <img src="https://www.save-point.org/images/smilies/ejlol/wink.gif" alt="Winking" title="Winking" class="smilie smilie_33" />]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Hex Colors RG</span></span></div>
<br />
<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">by Kyonides</span></span></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Introduction</span><br />
<br />
I'm back to leave you another scriptlet that will allow you to use hex colors in your windows and sprites with ease.<br />
<br />
This code will work on RMXP, RMVX and even RMVX ACE! <img src="https://www.save-point.org/images/smilies/ejlol/shocked.gif" alt="Shocked" title="Shocked" class="smilie smilie_22" /><br />
<br />
Just use it like this:<br />
<br />
For Windows:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>self.contents.font.color = hex_color("FF00FF")</code></div></div><br />
For Sprites:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>self.bitmap.font.color = hex_color("FF00FF")</code></div></div><br />
In this particular case, your text will become purple-ish! <img src="https://www.save-point.org/images/smilies/ejlol/virus.gif" alt="Virus" title="Virus" class="smilie smilie_75" /> <br />
<br />
You can also add 2 extra characters to set the alpha value of your custom color manually.<br />
<br />
In both cases you can add the # pound sign at the beginning of the string, but it's not mandatory.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">The Script</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># * Hex Colors RG * # <br />
#  Scripter : Kyonides<br />
#  2025-11-18<br />
<br />
module Hex<br />
  def hex_color(hex)<br />
    digits = hex.size<br />
    hex.sub!("#", "")<br />
    red = hex[0, 2].to_i(16)<br />
    green = hex[2, 2].to_i(16)<br />
    blue = hex[4, 2].to_i(16)<br />
    alpha = digits == 8 ? hex[6, 2] : 255<br />
    Color.new(red, green, blue, alpha)<br />
  end<br />
end<br />
<br />
class Window_Base<br />
  include Hex<br />
end<br />
<br />
class Sprite<br />
  include Hex<br />
end</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Terms &amp; Conditions</span><br />
<br />
It's free as in <img src="https://www.save-point.org/images/smilies/ejlol/beer.gif" alt="Beer" title="Beer" class="smilie smilie_189" /> beer. That's all you need to know. <img src="https://www.save-point.org/images/smilies/ejlol/wink.gif" alt="Winking" title="Winking" class="smilie smilie_33" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Ekuipment Points XP]]></title>
			<link>https://www.save-point.org/thread-13301.html</link>
			<pubDate>Thu, 06 Nov 2025 06:46:59 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.save-point.org/member.php?action=profile&uid=1471">kyonides</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.save-point.org/thread-13301.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Ekuipment Points XP</span></span></div>
<br />
<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">by Kyonides</span></span></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Introduction</span><br />
<br />
Limit the type of weapons or armor pieces your heroes will be able to equip!<br />
If your heroes want to replace their equipment, they better earn enough EP first!<br />
Another way to explain it would be to call it an equipment weight script.<br />
<br />
The script lets you set the default and custom EP the actor will start with. The same is valid for weapons and pieces of armor.<br />
Actors can also gain more EP by leveling up.<br />
<br />
Inside the <span style="font-weight: bold;" class="mycode_b">EkuipPoints</span> module you can find the WEAPON_POINTS, ARMOR_POINTS, ACTOR_POINTS &amp; the ACTOR_LEVEL_POINTS constants that will let you customize the EP earned by actors and the EP costs of their equipment.<br />
<br />
You can also change the X &amp; Y coordinates of windows or EP labels at will.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">NOTE</span><br />
<br />
To open the equipment window in battle, during the actor's command phase, press the RM's X button. Normally, it's linked to your A key on the keyboard.<br />
<br />
<div class="tborder">
  			<div class="thead" style="padding:4px; margin:1px;"><input type="button" class="button" value="+" style="font-family:Monospace; padding:0px" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].style.display=='none'){ this.parentNode.parentNode.getElementsByTagName('div')[1].style.display='';this.value='-';} else {this.parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.value='+';}"/> Screenshots</div>
  			<div class="trow2" style="display:none; padding:4px; margin:1px;">
<img src="https://i.postimg.cc/RZ3CJYWH/ekuipment-points-xp001.jpg" loading="lazy"  alt="[Image: ekuipment-points-xp001.jpg]" class="mycode_img" /><br />
<img src="https://i.postimg.cc/L8q4gWJP/ekuipment-points-xp002.jpg" loading="lazy"  alt="[Image: ekuipment-points-xp002.jpg]" class="mycode_img" /><br />
<img src="https://i.postimg.cc/kgVMRH2K/ekuipment-points-xp003.jpg" loading="lazy"  alt="[Image: ekuipment-points-xp003.jpg]" class="mycode_img" /><br />
<img src="https://i.postimg.cc/vZ18xK49/ekuipment-points-xp004.jpg" loading="lazy"  alt="[Image: ekuipment-points-xp004.jpg]" class="mycode_img" /><br />
<img src="https://i.postimg.cc/hvbbgCjD/ekuipment-points-xp005.jpg" loading="lazy"  alt="[Image: ekuipment-points-xp005.jpg]" class="mycode_img" /><br />
</div>
		</div>
<br />
<span style="font-weight: bold;" class="mycode_b">The Script</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># * Ekuipment Points XP * #<br />
#   Not a Plug &amp; Play Script<br />
#   Scripter : Kyonides<br />
#   v1.1.0 - 2025-11-12<br />
<br />
# Limit the type of weapons or armor pieces your heroes will be able to equip!<br />
# If heroes want to replace their equipment, they better earn enough EP first!<br />
<br />
# * Optional Script Calls * #<br />
# Block a given actor's change equipment feature, especially useful in battle:<br />
#  boolean stands for true OR false only.<br />
#   &#36;game_actors[ActorID].block_equip_change = boolean<br />
#   &#36;game_party.actors[Index].block_equip_change = boolean<br />
<br />
# Block the party's change equipment feature at once:<br />
#   &#36;game_party.block_equip_change = boolean<br />
<br />
# Increase a given actor's equipment points:<br />
#   &#36;game_actors[ActorID].ep_plus += Number<br />
#   &#36;game_party.actors[Index].ep_plus += Number<br />
<br />
module EkuipPoints<br />
  module Colors<br />
    EP_LABEL_COLOR  = [40, 242, 254] # [R,G,B]<br />
    EP_GAUGE_COLOR1 = [0, 0, 0] # [R,G,B]<br />
    EP_GAUGE_COLOR2 = [180, 255, 60] # [R,G,B]<br />
  end<br />
<br />
  module Battle<br />
    EQUIP_WIN_OPA = 255<br />
    EQUIP_WIN_BACK_OPA = 255<br />
    EQUIP_WIN_XY_WH    = [160, 320, 368, 160]<br />
    ACTOR_EP_WIN_XY_WH = [0, 320, 160, 96]<br />
  end<br />
  EP = "EP"<br />
  EP_COST_X = 220<br />
  EP_MENU_XY_W    = [304, 0, 60]<br />
  EP_STATS_XY_W   = [168, 0, 60]<br />
  EP_HELP_XY_WH   = [0, 0, 104, 4]<br />
  EP_STATUS_XY_WH = [320, 112, 120, 6]<br />
  # Define Hashes<br />
  WEAPON_POINTS = {}<br />
  ARMOR_POINTS = {}<br />
  ACTOR_POINTS = {}<br />
  ACTOR_LEVEL_POINTS = {}<br />
  # Set Default Values<br />
  WEAPON_POINTS.default = 1<br />
  ARMOR_POINTS.default = 1<br />
  ACTOR_POINTS.default = 4<br />
  ACTOR_LEVEL_POINTS.default = { :levels =&gt; 10, :ep =&gt; 1 }<br />
  # [WeaponID] = Points<br />
  WEAPON_POINTS[2] = 2<br />
  WEAPON_POINTS[3] = 4<br />
  WEAPON_POINTS[4] = 6<br />
  # [ArmorID] = Points<br />
  ARMOR_POINTS[2] = 2<br />
  ARMOR_POINTS[3] = 4<br />
  ARMOR_POINTS[4] = 6<br />
  # [ActorID] = BasePoints<br />
  ACTOR_POINTS[1] = 7<br />
  ACTOR_POINTS[7] = 5<br />
  # [ActorID] = { :levels =&gt; LevelsNeeded, :ep =&gt; ExtraPoints }<br />
  ACTOR_LEVEL_POINTS[1] = { :levels =&gt; 8, :ep =&gt; 2 }<br />
end<br />
<br />
module RPG<br />
  class Equipment<br />
    def ep_cost<br />
      0<br />
    end<br />
  end<br />
<br />
  class Weapon<br />
    def ep_cost<br />
      @ep_cost ||= EkuipPoints::WEAPON_POINTS[@id]<br />
    end<br />
  end<br />
<br />
  class Armor<br />
    def ep_cost<br />
      @ep_cost ||= EkuipPoints::ARMOR_POINTS[@id]<br />
    end<br />
  end<br />
end<br />
<br />
class Game_Actor<br />
  alias :kyon_ekuip_points_gm_act_stp :setup<br />
  alias :kyon_ekuip_points_gm_act_set_exp :exp=<br />
  def setup(actor_id)<br />
    kyon_ekuip_points_gm_act_stp(actor_id)<br />
    @maxep_base = EkuipPoints::ACTOR_POINTS[actor_id]<br />
    hash = EkuipPoints::ACTOR_LEVEL_POINTS[actor_id]<br />
    @base_ep_levels = hash[:levels]<br />
    @base_level_ep = hash[:ep]<br />
    @ep_plus = 0<br />
    calc_level_ep<br />
  end<br />
<br />
  def calc_level_ep<br />
    @level_ep = @level / @base_ep_levels * @base_level_ep<br />
  end<br />
<br />
  def exp=(new_exp)<br />
    kyon_ekuip_points_gm_act_set_exp(new_exp)<br />
    calc_level_ep<br />
  end<br />
<br />
  def maxep<br />
    @maxep_base + @level_ep + @ep_plus<br />
  end<br />
<br />
  def armor_ids<br />
    [@armor1_id, @armor2_id, @armor3_id, @armor4_id]<br />
  end<br />
<br />
  def equip_ids<br />
    [@weapon_id] + armor_ids<br />
  end<br />
<br />
  def get_weapon<br />
    &#36;data_weapons[@weapon_id]<br />
  end<br />
<br />
  def get_armors<br />
    armor_ids.map {|armor_id| &#36;data_armors[armor_id] }<br />
  end<br />
<br />
  def equip_list<br />
    [get_weapon] + get_armors<br />
  end<br />
<br />
  def ep_used<br />
    equip_list.compact.inject(0) {|total, item| total + item.ep_cost }<br />
  end<br />
<br />
  def ep_left<br />
    self.maxep - self.ep_used<br />
  end<br />
<br />
  def find_equipment(equip_type, equip_id)<br />
    return RPG::Equipment.new if equip_id == 0<br />
    equip_type == 0 ? &#36;data_weapons[equip_id] : &#36;data_armors[equip_id]<br />
  end<br />
<br />
  def enough_ep?(equip_type, item)<br />
    return true unless item<br />
    equip_id = equip_ids[equip_type]<br />
    equipment = find_equipment(equip_type, equip_id)<br />
    used = self.ep_used - equipment.ep_cost + item.ep_cost<br />
    return false if used &lt; 0<br />
    self.maxep &gt;= used<br />
  end<br />
  attr_accessor :ep_plus, :block_equip_change<br />
end<br />
<br />
class Game_Party<br />
  def block_equip_change=(state)<br />
    @actors.each {|actor| actor.block_equip_change = state }<br />
  end<br />
end<br />
<br />
class Window_Base<br />
  include EkuipPoints::Colors<br />
  LH = 32<br />
  def ep_color<br />
    @ep_color ||= Color.new(*EP_LABEL_COLOR)<br />
  end<br />
<br />
  def ep_gauge_color1<br />
    @ep_gauge_color1 ||= Color.new(*EP_GAUGE_COLOR1)<br />
  end<br />
<br />
  def ep_gauge_color2<br />
    @ep_gauge_color2 ||= Color.new(*EP_GAUGE_COLOR2)<br />
  end<br />
<br />
  def draw_ep_left(actor, lx, ly, lw, lh=4, large=nil)<br />
    left = actor.ep_left<br />
    gw = lw * left / actor.maxep<br />
    c = self.contents<br />
    c.fill_rect(lx, ly + LH - lh - 2, lw, lh, ep_gauge_color1)<br />
    c.fill_rect(lx, ly + LH - lh - 2, gw, lh, ep_gauge_color2)<br />
    c.font.color = system_color<br />
    label = EkuipPoints::EP<br />
    c.draw_text(lx, ly, lw, LH, label)<br />
    c.font.color = normal_color<br />
    if large<br />
      c.draw_text(lx, ly, lw / 2 + 12, LH, left.to_s, 2)<br />
      c.draw_text(lx, ly, lw / 2 + 24, LH, "/", 2)<br />
      c.draw_text(lx, ly, lw, LH, actor.maxep.to_s, 2)<br />
    else<br />
      c.draw_text(lx, ly, lw, LH, left.to_s, 2)<br />
    end<br />
  end<br />
end<br />
<br />
class Window_MenuStatus<br />
  alias :kyon_ekuip_points_win_mnst_refr :refresh<br />
  def refresh<br />
    kyon_ekuip_points_win_mnst_refr<br />
    @actors = &#36;game_party.actors<br />
    total = @actors.size<br />
    total.times {|n| draw_actor_ep_status(n) }<br />
  end<br />
<br />
  def draw_actor_ep_status(n)<br />
    actor = @actors[n]<br />
    ex, ey, ew = EkuipPoints::EP_MENU_XY_W<br />
    ex += 64 <br />
    ey += n * 116<br />
    draw_ep_left(actor, ex, ey, ew)<br />
  end<br />
end<br />
<br />
class Window_EquipLeft<br />
  alias :kyon_ekuip_points_win_eqlft_refr :refresh<br />
  def refresh<br />
    kyon_ekuip_points_win_eqlft_refr<br />
    draw_ep_left(@actor, *EkuipPoints::EP_STATS_XY_W)<br />
  end<br />
end<br />
<br />
class Window_EquipRight<br />
  include EkuipPoints::Battle<br />
  alias :kyon_ekuip_points_win_eqrgt_init :initialize<br />
  alias :kyon_ekuip_points_win_eqrgt_refr :refresh<br />
  def initialize(actor)<br />
    if &#36;game_temp.in_battle<br />
      super(*EQUIP_WIN_XY_WH)<br />
      setup_window(actor)<br />
    else<br />
      kyon_ekuip_points_win_eqrgt_init(actor)<br />
    end<br />
  end<br />
<br />
  def setup_window(actor)<br />
    self.z = 1000<br />
    self.opacity = EQUIP_WIN_OPA<br />
    self.back_opacity = EQUIP_WIN_BACK_OPA<br />
    self.contents = Bitmap.new(width - 32, height)<br />
    @actor = actor<br />
    refresh<br />
    self.index = 0<br />
  end<br />
<br />
  def refresh<br />
    kyon_ekuip_points_win_eqrgt_refr<br />
    @data.size.times {|n| draw_equip_ep(n) }<br />
  end<br />
<br />
  def draw_equip_ep(n)<br />
    item = @data[n]<br />
    return unless item<br />
    self.contents.font.color = ep_color<br />
    number = sprintf("%2d", item.ep_cost)<br />
    self.contents.draw_text(0, n * LH, width - 32, LH, number, 2)<br />
  end<br />
end<br />
<br />
class Window_EquipItem<br />
  def set_battle_coord<br />
    self.x = 0<br />
    self.y = 64<br />
    self.z = 1000<br />
  end<br />
<br />
  def reset_index<br />
    self.index = 0 if @index &lt; 0<br />
  end<br />
<br />
  def enable?(item)<br />
    @actor.enough_ep?(@equip_type, item)<br />
  end<br />
<br />
  def equip_type=(type)<br />
    @equip_type = type<br />
    refresh<br />
  end<br />
<br />
  def draw_item(index)<br />
    item = @data[index]<br />
    x = 4 + index % 2 * (288 + 32)<br />
    y = index / 2 * 32<br />
    case item<br />
    when RPG::Weapon<br />
      number = &#36;game_party.weapon_number(item.id)<br />
    when RPG::Armor<br />
      number = &#36;game_party.armor_number(item.id)<br />
    end<br />
    enabled = enable?(item)<br />
    color = enabled ? normal_color : disabled_color<br />
    font = self.contents.font<br />
    font.color = color<br />
    bitmap = RPG::Cache.icon(item.icon_name)<br />
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))<br />
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)<br />
    self.contents.draw_text(x + 240, y, 16, 32, ":", 1)<br />
    self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)<br />
    font.color = ep_color<br />
    font.color.alpha = 160 unless enabled<br />
    rect = Rect.new(x + EkuipPoints::EP_COST_X, y, 16, 32)<br />
    number = item.ep_cost<br />
    self.contents.draw_text(rect, sprintf("%2d", number), 2)<br />
    font.color.alpha = 255 unless enabled<br />
  end<br />
end<br />
<br />
class Window_Status<br />
  alias :kyon_ekuip_points_win_st_refr :refresh<br />
  def refresh<br />
    kyon_ekuip_points_win_st_refr<br />
    ex, ey, ew, eh = EkuipPoints::EP_STATUS_XY_WH<br />
    draw_ep_left(@actor, ex, ey, ew, eh, true)<br />
  end<br />
end<br />
<br />
class Scene_Equip<br />
  alias :kyon_ekuip_points_scn_eqp_up_item :update_item<br />
  def item_windows<br />
    [@item_window1, @item_window2, @item_window3, @item_window4, @item_window5]<br />
  end<br />
<br />
  def update_item<br />
    if Input.trigger?(Input::C)<br />
      item = @item_window.item<br />
      if item and !@actor.enough_ep?(@right_window.index, item)<br />
        &#36;game_system.se_play(&#36;data_system.buzzer_se)<br />
        return<br />
      end<br />
    end<br />
    kyon_ekuip_points_scn_eqp_up_item<br />
    if Input.trigger?(Input::C)<br />
      windows = item_windows<br />
      windows.delete_at(@right_window.index)<br />
      windows.each {|window| window.refresh }<br />
    end<br />
  end<br />
end<br />
<br />
module EkuipPoints<br />
  class ActorStatsWindow &lt; Window_Base<br />
    def initialize(actor)<br />
      super(*Battle::ACTOR_EP_WIN_XY_WH)<br />
      self.contents = Bitmap.new(self.width - 32, self.height - 32)<br />
      self.opacity = Battle::EQUIP_WIN_OPA<br />
      self.back_opacity = Battle::EQUIP_WIN_BACK_OPA<br />
      self.z = 2000<br />
      @hw = self.contents.width * 75 / 100<br />
      @actor = actor<br />
      refresh<br />
    end<br />
<br />
    def refresh<br />
      self.contents.clear<br />
      draw_actor_name(@actor, 0, 0)<br />
      draw_ep_left(@actor, 0, 32, @hw, 4)<br />
    end<br />
<br />
    def class_type<br />
      :ep_stats<br />
    end<br />
  end<br />
end<br />
<br />
class Scene_Battle<br />
  alias :kyon_ekuip_points_scn_btl_up_ph3 :update_phase3<br />
  alias :kyon_ekuip_points_scn_btl_up_ph3_bsc_cmd :update_phase3_basic_command<br />
  def update_phase3<br />
    kyon_ekuip_points_scn_btl_up_ph3<br />
    return unless @equip_item<br />
    update_phase3_equipment<br />
  end<br />
<br />
  def update_phase3_equipment<br />
    case @equip_index<br />
    when 0<br />
      update_equip_type<br />
    when 1<br />
      update_equip_list<br />
    end<br />
  end<br />
<br />
  def update_phase3_basic_command<br />
    kyon_ekuip_points_scn_btl_up_ph3_bsc_cmd<br />
    if Input.trigger?(Input::X)<br />
      create_equipment_windows<br />
    end<br />
  end<br />
<br />
  def create_equipment_windows<br />
    if @active_battler.block_equip_change<br />
      &#36;game_system.se_play(&#36;data_system.buzzer_se)<br />
      return<br />
    end<br />
    &#36;game_system.se_play(&#36;data_system.decision_se)<br />
    @help_window.visible = true<br />
    @ep_window = EkuipPoints::ActorStatsWindow.new(@active_battler)<br />
    @equip_window = Window_EquipRight.new(@active_battler)<br />
    @equip_item_window = Window_EquipItem.new(@active_battler, 0)<br />
    @equip_item_window.set_battle_coord<br />
    @equip_item_window.help_window = @help_window<br />
    @equip_windows = [@ep_window, @equip_window, @equip_item_window]<br />
    @actor_command_window.active = false<br />
    @equip_index = 0<br />
    @equip_item = true<br />
  end<br />
<br />
  def dispose_equipment_windows<br />
    &#36;game_system.se_play(&#36;data_system.cancel_se)<br />
    @equip_windows.each {|window| window.dispose }<br />
    @actor_command_window.active = true<br />
    @help_window.visible = false<br />
    @equip_item = false<br />
  end<br />
<br />
  def refresh_equip_type<br />
    @equip_item_window.equip_type = @equip_window.index<br />
    @equip_item_window.index = -1<br />
  end<br />
<br />
  def update_equip_type<br />
    @equip_window.update<br />
    if Input.trigger?(Input::B)<br />
      dispose_equipment_windows<br />
      return<br />
    elsif Input.trigger?(Input::C)<br />
      &#36;game_system.se_play(&#36;data_system.decision_se)<br />
      @equip_item_window.active = true<br />
      @equip_window.active = false<br />
      @equip_item_window.reset_index<br />
      return @equip_index = 1<br />
    elsif Input.trigger?(Input::DOWN)<br />
      refresh_equip_type<br />
      return<br />
    elsif Input.trigger?(Input::UP)<br />
      refresh_equip_type<br />
    end<br />
  end<br />
<br />
  def back_to_main_equip<br />
    @equip_item_window.index = -1<br />
    @equip_item_window.active = false<br />
    @equip_window.active = true<br />
    @equip_index = 0<br />
  end<br />
<br />
  def update_equip_list<br />
    @equip_item_window.update<br />
    if Input.trigger?(Input::B)<br />
      &#36;game_system.se_play(&#36;data_system.cancel_se)<br />
      back_to_main_equip<br />
      return<br />
    elsif Input.trigger?(Input::C)<br />
      pos = @equip_window.index<br />
      item = @equip_item_window.item<br />
      if item and !@active_battler.enough_ep?(pos, item)<br />
        &#36;game_system.se_play(&#36;data_system.buzzer_se)<br />
        return<br />
      end<br />
      &#36;game_system.se_play(&#36;data_system.equip_se)<br />
      item_id = item ? item.id : 0<br />
      @active_battler.equip(@equip_window.index, item_id)<br />
      @equip_item_window.refresh<br />
      @equip_window.refresh<br />
      @ep_window.refresh<br />
      back_to_main_equip<br />
    end<br />
  end<br />
end</code></div></div><br />
<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: x-large;" class="mycode_size"><a href="https://www.mediafire.com/folder/kh1bibfguxbll/EkuipmentPoints" target="_blank" rel="noopener" class="mycode_url">DOWNLOAD DEMO</a></span></span></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Terms &amp; Conditions</span><br />
<br />
Free as in <img src="https://www.save-point.org/images/smilies/ejlol/beer.gif" alt="Beer" title="Beer" class="smilie smilie_189" /> beer for non-commercial use.<br />
Include me in your game credits! <img src="https://www.save-point.org/images/smilies/ejlol/grin.gif" alt="Grinning" title="Grinning" class="smilie smilie_25" /><br />
That's it! <img src="https://www.save-point.org/images/smilies/ejlol/tongue.gif" alt="Tongue sticking out" title="Tongue sticking out" class="smilie smilie_24" />]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Ekuipment Points XP</span></span></div>
<br />
<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">by Kyonides</span></span></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Introduction</span><br />
<br />
Limit the type of weapons or armor pieces your heroes will be able to equip!<br />
If your heroes want to replace their equipment, they better earn enough EP first!<br />
Another way to explain it would be to call it an equipment weight script.<br />
<br />
The script lets you set the default and custom EP the actor will start with. The same is valid for weapons and pieces of armor.<br />
Actors can also gain more EP by leveling up.<br />
<br />
Inside the <span style="font-weight: bold;" class="mycode_b">EkuipPoints</span> module you can find the WEAPON_POINTS, ARMOR_POINTS, ACTOR_POINTS &amp; the ACTOR_LEVEL_POINTS constants that will let you customize the EP earned by actors and the EP costs of their equipment.<br />
<br />
You can also change the X &amp; Y coordinates of windows or EP labels at will.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">NOTE</span><br />
<br />
To open the equipment window in battle, during the actor's command phase, press the RM's X button. Normally, it's linked to your A key on the keyboard.<br />
<br />
<div class="tborder">
  			<div class="thead" style="padding:4px; margin:1px;"><input type="button" class="button" value="+" style="font-family:Monospace; padding:0px" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].style.display=='none'){ this.parentNode.parentNode.getElementsByTagName('div')[1].style.display='';this.value='-';} else {this.parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.value='+';}"/> Screenshots</div>
  			<div class="trow2" style="display:none; padding:4px; margin:1px;">
<img src="https://i.postimg.cc/RZ3CJYWH/ekuipment-points-xp001.jpg" loading="lazy"  alt="[Image: ekuipment-points-xp001.jpg]" class="mycode_img" /><br />
<img src="https://i.postimg.cc/L8q4gWJP/ekuipment-points-xp002.jpg" loading="lazy"  alt="[Image: ekuipment-points-xp002.jpg]" class="mycode_img" /><br />
<img src="https://i.postimg.cc/kgVMRH2K/ekuipment-points-xp003.jpg" loading="lazy"  alt="[Image: ekuipment-points-xp003.jpg]" class="mycode_img" /><br />
<img src="https://i.postimg.cc/vZ18xK49/ekuipment-points-xp004.jpg" loading="lazy"  alt="[Image: ekuipment-points-xp004.jpg]" class="mycode_img" /><br />
<img src="https://i.postimg.cc/hvbbgCjD/ekuipment-points-xp005.jpg" loading="lazy"  alt="[Image: ekuipment-points-xp005.jpg]" class="mycode_img" /><br />
</div>
		</div>
<br />
<span style="font-weight: bold;" class="mycode_b">The Script</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># * Ekuipment Points XP * #<br />
#   Not a Plug &amp; Play Script<br />
#   Scripter : Kyonides<br />
#   v1.1.0 - 2025-11-12<br />
<br />
# Limit the type of weapons or armor pieces your heroes will be able to equip!<br />
# If heroes want to replace their equipment, they better earn enough EP first!<br />
<br />
# * Optional Script Calls * #<br />
# Block a given actor's change equipment feature, especially useful in battle:<br />
#  boolean stands for true OR false only.<br />
#   &#36;game_actors[ActorID].block_equip_change = boolean<br />
#   &#36;game_party.actors[Index].block_equip_change = boolean<br />
<br />
# Block the party's change equipment feature at once:<br />
#   &#36;game_party.block_equip_change = boolean<br />
<br />
# Increase a given actor's equipment points:<br />
#   &#36;game_actors[ActorID].ep_plus += Number<br />
#   &#36;game_party.actors[Index].ep_plus += Number<br />
<br />
module EkuipPoints<br />
  module Colors<br />
    EP_LABEL_COLOR  = [40, 242, 254] # [R,G,B]<br />
    EP_GAUGE_COLOR1 = [0, 0, 0] # [R,G,B]<br />
    EP_GAUGE_COLOR2 = [180, 255, 60] # [R,G,B]<br />
  end<br />
<br />
  module Battle<br />
    EQUIP_WIN_OPA = 255<br />
    EQUIP_WIN_BACK_OPA = 255<br />
    EQUIP_WIN_XY_WH    = [160, 320, 368, 160]<br />
    ACTOR_EP_WIN_XY_WH = [0, 320, 160, 96]<br />
  end<br />
  EP = "EP"<br />
  EP_COST_X = 220<br />
  EP_MENU_XY_W    = [304, 0, 60]<br />
  EP_STATS_XY_W   = [168, 0, 60]<br />
  EP_HELP_XY_WH   = [0, 0, 104, 4]<br />
  EP_STATUS_XY_WH = [320, 112, 120, 6]<br />
  # Define Hashes<br />
  WEAPON_POINTS = {}<br />
  ARMOR_POINTS = {}<br />
  ACTOR_POINTS = {}<br />
  ACTOR_LEVEL_POINTS = {}<br />
  # Set Default Values<br />
  WEAPON_POINTS.default = 1<br />
  ARMOR_POINTS.default = 1<br />
  ACTOR_POINTS.default = 4<br />
  ACTOR_LEVEL_POINTS.default = { :levels =&gt; 10, :ep =&gt; 1 }<br />
  # [WeaponID] = Points<br />
  WEAPON_POINTS[2] = 2<br />
  WEAPON_POINTS[3] = 4<br />
  WEAPON_POINTS[4] = 6<br />
  # [ArmorID] = Points<br />
  ARMOR_POINTS[2] = 2<br />
  ARMOR_POINTS[3] = 4<br />
  ARMOR_POINTS[4] = 6<br />
  # [ActorID] = BasePoints<br />
  ACTOR_POINTS[1] = 7<br />
  ACTOR_POINTS[7] = 5<br />
  # [ActorID] = { :levels =&gt; LevelsNeeded, :ep =&gt; ExtraPoints }<br />
  ACTOR_LEVEL_POINTS[1] = { :levels =&gt; 8, :ep =&gt; 2 }<br />
end<br />
<br />
module RPG<br />
  class Equipment<br />
    def ep_cost<br />
      0<br />
    end<br />
  end<br />
<br />
  class Weapon<br />
    def ep_cost<br />
      @ep_cost ||= EkuipPoints::WEAPON_POINTS[@id]<br />
    end<br />
  end<br />
<br />
  class Armor<br />
    def ep_cost<br />
      @ep_cost ||= EkuipPoints::ARMOR_POINTS[@id]<br />
    end<br />
  end<br />
end<br />
<br />
class Game_Actor<br />
  alias :kyon_ekuip_points_gm_act_stp :setup<br />
  alias :kyon_ekuip_points_gm_act_set_exp :exp=<br />
  def setup(actor_id)<br />
    kyon_ekuip_points_gm_act_stp(actor_id)<br />
    @maxep_base = EkuipPoints::ACTOR_POINTS[actor_id]<br />
    hash = EkuipPoints::ACTOR_LEVEL_POINTS[actor_id]<br />
    @base_ep_levels = hash[:levels]<br />
    @base_level_ep = hash[:ep]<br />
    @ep_plus = 0<br />
    calc_level_ep<br />
  end<br />
<br />
  def calc_level_ep<br />
    @level_ep = @level / @base_ep_levels * @base_level_ep<br />
  end<br />
<br />
  def exp=(new_exp)<br />
    kyon_ekuip_points_gm_act_set_exp(new_exp)<br />
    calc_level_ep<br />
  end<br />
<br />
  def maxep<br />
    @maxep_base + @level_ep + @ep_plus<br />
  end<br />
<br />
  def armor_ids<br />
    [@armor1_id, @armor2_id, @armor3_id, @armor4_id]<br />
  end<br />
<br />
  def equip_ids<br />
    [@weapon_id] + armor_ids<br />
  end<br />
<br />
  def get_weapon<br />
    &#36;data_weapons[@weapon_id]<br />
  end<br />
<br />
  def get_armors<br />
    armor_ids.map {|armor_id| &#36;data_armors[armor_id] }<br />
  end<br />
<br />
  def equip_list<br />
    [get_weapon] + get_armors<br />
  end<br />
<br />
  def ep_used<br />
    equip_list.compact.inject(0) {|total, item| total + item.ep_cost }<br />
  end<br />
<br />
  def ep_left<br />
    self.maxep - self.ep_used<br />
  end<br />
<br />
  def find_equipment(equip_type, equip_id)<br />
    return RPG::Equipment.new if equip_id == 0<br />
    equip_type == 0 ? &#36;data_weapons[equip_id] : &#36;data_armors[equip_id]<br />
  end<br />
<br />
  def enough_ep?(equip_type, item)<br />
    return true unless item<br />
    equip_id = equip_ids[equip_type]<br />
    equipment = find_equipment(equip_type, equip_id)<br />
    used = self.ep_used - equipment.ep_cost + item.ep_cost<br />
    return false if used &lt; 0<br />
    self.maxep &gt;= used<br />
  end<br />
  attr_accessor :ep_plus, :block_equip_change<br />
end<br />
<br />
class Game_Party<br />
  def block_equip_change=(state)<br />
    @actors.each {|actor| actor.block_equip_change = state }<br />
  end<br />
end<br />
<br />
class Window_Base<br />
  include EkuipPoints::Colors<br />
  LH = 32<br />
  def ep_color<br />
    @ep_color ||= Color.new(*EP_LABEL_COLOR)<br />
  end<br />
<br />
  def ep_gauge_color1<br />
    @ep_gauge_color1 ||= Color.new(*EP_GAUGE_COLOR1)<br />
  end<br />
<br />
  def ep_gauge_color2<br />
    @ep_gauge_color2 ||= Color.new(*EP_GAUGE_COLOR2)<br />
  end<br />
<br />
  def draw_ep_left(actor, lx, ly, lw, lh=4, large=nil)<br />
    left = actor.ep_left<br />
    gw = lw * left / actor.maxep<br />
    c = self.contents<br />
    c.fill_rect(lx, ly + LH - lh - 2, lw, lh, ep_gauge_color1)<br />
    c.fill_rect(lx, ly + LH - lh - 2, gw, lh, ep_gauge_color2)<br />
    c.font.color = system_color<br />
    label = EkuipPoints::EP<br />
    c.draw_text(lx, ly, lw, LH, label)<br />
    c.font.color = normal_color<br />
    if large<br />
      c.draw_text(lx, ly, lw / 2 + 12, LH, left.to_s, 2)<br />
      c.draw_text(lx, ly, lw / 2 + 24, LH, "/", 2)<br />
      c.draw_text(lx, ly, lw, LH, actor.maxep.to_s, 2)<br />
    else<br />
      c.draw_text(lx, ly, lw, LH, left.to_s, 2)<br />
    end<br />
  end<br />
end<br />
<br />
class Window_MenuStatus<br />
  alias :kyon_ekuip_points_win_mnst_refr :refresh<br />
  def refresh<br />
    kyon_ekuip_points_win_mnst_refr<br />
    @actors = &#36;game_party.actors<br />
    total = @actors.size<br />
    total.times {|n| draw_actor_ep_status(n) }<br />
  end<br />
<br />
  def draw_actor_ep_status(n)<br />
    actor = @actors[n]<br />
    ex, ey, ew = EkuipPoints::EP_MENU_XY_W<br />
    ex += 64 <br />
    ey += n * 116<br />
    draw_ep_left(actor, ex, ey, ew)<br />
  end<br />
end<br />
<br />
class Window_EquipLeft<br />
  alias :kyon_ekuip_points_win_eqlft_refr :refresh<br />
  def refresh<br />
    kyon_ekuip_points_win_eqlft_refr<br />
    draw_ep_left(@actor, *EkuipPoints::EP_STATS_XY_W)<br />
  end<br />
end<br />
<br />
class Window_EquipRight<br />
  include EkuipPoints::Battle<br />
  alias :kyon_ekuip_points_win_eqrgt_init :initialize<br />
  alias :kyon_ekuip_points_win_eqrgt_refr :refresh<br />
  def initialize(actor)<br />
    if &#36;game_temp.in_battle<br />
      super(*EQUIP_WIN_XY_WH)<br />
      setup_window(actor)<br />
    else<br />
      kyon_ekuip_points_win_eqrgt_init(actor)<br />
    end<br />
  end<br />
<br />
  def setup_window(actor)<br />
    self.z = 1000<br />
    self.opacity = EQUIP_WIN_OPA<br />
    self.back_opacity = EQUIP_WIN_BACK_OPA<br />
    self.contents = Bitmap.new(width - 32, height)<br />
    @actor = actor<br />
    refresh<br />
    self.index = 0<br />
  end<br />
<br />
  def refresh<br />
    kyon_ekuip_points_win_eqrgt_refr<br />
    @data.size.times {|n| draw_equip_ep(n) }<br />
  end<br />
<br />
  def draw_equip_ep(n)<br />
    item = @data[n]<br />
    return unless item<br />
    self.contents.font.color = ep_color<br />
    number = sprintf("%2d", item.ep_cost)<br />
    self.contents.draw_text(0, n * LH, width - 32, LH, number, 2)<br />
  end<br />
end<br />
<br />
class Window_EquipItem<br />
  def set_battle_coord<br />
    self.x = 0<br />
    self.y = 64<br />
    self.z = 1000<br />
  end<br />
<br />
  def reset_index<br />
    self.index = 0 if @index &lt; 0<br />
  end<br />
<br />
  def enable?(item)<br />
    @actor.enough_ep?(@equip_type, item)<br />
  end<br />
<br />
  def equip_type=(type)<br />
    @equip_type = type<br />
    refresh<br />
  end<br />
<br />
  def draw_item(index)<br />
    item = @data[index]<br />
    x = 4 + index % 2 * (288 + 32)<br />
    y = index / 2 * 32<br />
    case item<br />
    when RPG::Weapon<br />
      number = &#36;game_party.weapon_number(item.id)<br />
    when RPG::Armor<br />
      number = &#36;game_party.armor_number(item.id)<br />
    end<br />
    enabled = enable?(item)<br />
    color = enabled ? normal_color : disabled_color<br />
    font = self.contents.font<br />
    font.color = color<br />
    bitmap = RPG::Cache.icon(item.icon_name)<br />
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))<br />
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)<br />
    self.contents.draw_text(x + 240, y, 16, 32, ":", 1)<br />
    self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)<br />
    font.color = ep_color<br />
    font.color.alpha = 160 unless enabled<br />
    rect = Rect.new(x + EkuipPoints::EP_COST_X, y, 16, 32)<br />
    number = item.ep_cost<br />
    self.contents.draw_text(rect, sprintf("%2d", number), 2)<br />
    font.color.alpha = 255 unless enabled<br />
  end<br />
end<br />
<br />
class Window_Status<br />
  alias :kyon_ekuip_points_win_st_refr :refresh<br />
  def refresh<br />
    kyon_ekuip_points_win_st_refr<br />
    ex, ey, ew, eh = EkuipPoints::EP_STATUS_XY_WH<br />
    draw_ep_left(@actor, ex, ey, ew, eh, true)<br />
  end<br />
end<br />
<br />
class Scene_Equip<br />
  alias :kyon_ekuip_points_scn_eqp_up_item :update_item<br />
  def item_windows<br />
    [@item_window1, @item_window2, @item_window3, @item_window4, @item_window5]<br />
  end<br />
<br />
  def update_item<br />
    if Input.trigger?(Input::C)<br />
      item = @item_window.item<br />
      if item and !@actor.enough_ep?(@right_window.index, item)<br />
        &#36;game_system.se_play(&#36;data_system.buzzer_se)<br />
        return<br />
      end<br />
    end<br />
    kyon_ekuip_points_scn_eqp_up_item<br />
    if Input.trigger?(Input::C)<br />
      windows = item_windows<br />
      windows.delete_at(@right_window.index)<br />
      windows.each {|window| window.refresh }<br />
    end<br />
  end<br />
end<br />
<br />
module EkuipPoints<br />
  class ActorStatsWindow &lt; Window_Base<br />
    def initialize(actor)<br />
      super(*Battle::ACTOR_EP_WIN_XY_WH)<br />
      self.contents = Bitmap.new(self.width - 32, self.height - 32)<br />
      self.opacity = Battle::EQUIP_WIN_OPA<br />
      self.back_opacity = Battle::EQUIP_WIN_BACK_OPA<br />
      self.z = 2000<br />
      @hw = self.contents.width * 75 / 100<br />
      @actor = actor<br />
      refresh<br />
    end<br />
<br />
    def refresh<br />
      self.contents.clear<br />
      draw_actor_name(@actor, 0, 0)<br />
      draw_ep_left(@actor, 0, 32, @hw, 4)<br />
    end<br />
<br />
    def class_type<br />
      :ep_stats<br />
    end<br />
  end<br />
end<br />
<br />
class Scene_Battle<br />
  alias :kyon_ekuip_points_scn_btl_up_ph3 :update_phase3<br />
  alias :kyon_ekuip_points_scn_btl_up_ph3_bsc_cmd :update_phase3_basic_command<br />
  def update_phase3<br />
    kyon_ekuip_points_scn_btl_up_ph3<br />
    return unless @equip_item<br />
    update_phase3_equipment<br />
  end<br />
<br />
  def update_phase3_equipment<br />
    case @equip_index<br />
    when 0<br />
      update_equip_type<br />
    when 1<br />
      update_equip_list<br />
    end<br />
  end<br />
<br />
  def update_phase3_basic_command<br />
    kyon_ekuip_points_scn_btl_up_ph3_bsc_cmd<br />
    if Input.trigger?(Input::X)<br />
      create_equipment_windows<br />
    end<br />
  end<br />
<br />
  def create_equipment_windows<br />
    if @active_battler.block_equip_change<br />
      &#36;game_system.se_play(&#36;data_system.buzzer_se)<br />
      return<br />
    end<br />
    &#36;game_system.se_play(&#36;data_system.decision_se)<br />
    @help_window.visible = true<br />
    @ep_window = EkuipPoints::ActorStatsWindow.new(@active_battler)<br />
    @equip_window = Window_EquipRight.new(@active_battler)<br />
    @equip_item_window = Window_EquipItem.new(@active_battler, 0)<br />
    @equip_item_window.set_battle_coord<br />
    @equip_item_window.help_window = @help_window<br />
    @equip_windows = [@ep_window, @equip_window, @equip_item_window]<br />
    @actor_command_window.active = false<br />
    @equip_index = 0<br />
    @equip_item = true<br />
  end<br />
<br />
  def dispose_equipment_windows<br />
    &#36;game_system.se_play(&#36;data_system.cancel_se)<br />
    @equip_windows.each {|window| window.dispose }<br />
    @actor_command_window.active = true<br />
    @help_window.visible = false<br />
    @equip_item = false<br />
  end<br />
<br />
  def refresh_equip_type<br />
    @equip_item_window.equip_type = @equip_window.index<br />
    @equip_item_window.index = -1<br />
  end<br />
<br />
  def update_equip_type<br />
    @equip_window.update<br />
    if Input.trigger?(Input::B)<br />
      dispose_equipment_windows<br />
      return<br />
    elsif Input.trigger?(Input::C)<br />
      &#36;game_system.se_play(&#36;data_system.decision_se)<br />
      @equip_item_window.active = true<br />
      @equip_window.active = false<br />
      @equip_item_window.reset_index<br />
      return @equip_index = 1<br />
    elsif Input.trigger?(Input::DOWN)<br />
      refresh_equip_type<br />
      return<br />
    elsif Input.trigger?(Input::UP)<br />
      refresh_equip_type<br />
    end<br />
  end<br />
<br />
  def back_to_main_equip<br />
    @equip_item_window.index = -1<br />
    @equip_item_window.active = false<br />
    @equip_window.active = true<br />
    @equip_index = 0<br />
  end<br />
<br />
  def update_equip_list<br />
    @equip_item_window.update<br />
    if Input.trigger?(Input::B)<br />
      &#36;game_system.se_play(&#36;data_system.cancel_se)<br />
      back_to_main_equip<br />
      return<br />
    elsif Input.trigger?(Input::C)<br />
      pos = @equip_window.index<br />
      item = @equip_item_window.item<br />
      if item and !@active_battler.enough_ep?(pos, item)<br />
        &#36;game_system.se_play(&#36;data_system.buzzer_se)<br />
        return<br />
      end<br />
      &#36;game_system.se_play(&#36;data_system.equip_se)<br />
      item_id = item ? item.id : 0<br />
      @active_battler.equip(@equip_window.index, item_id)<br />
      @equip_item_window.refresh<br />
      @equip_window.refresh<br />
      @ep_window.refresh<br />
      back_to_main_equip<br />
    end<br />
  end<br />
end</code></div></div><br />
<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: x-large;" class="mycode_size"><a href="https://www.mediafire.com/folder/kh1bibfguxbll/EkuipmentPoints" target="_blank" rel="noopener" class="mycode_url">DOWNLOAD DEMO</a></span></span></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Terms &amp; Conditions</span><br />
<br />
Free as in <img src="https://www.save-point.org/images/smilies/ejlol/beer.gif" alt="Beer" title="Beer" class="smilie smilie_189" /> beer for non-commercial use.<br />
Include me in your game credits! <img src="https://www.save-point.org/images/smilies/ejlol/grin.gif" alt="Grinning" title="Grinning" class="smilie smilie_25" /><br />
That's it! <img src="https://www.save-point.org/images/smilies/ejlol/tongue.gif" alt="Tongue sticking out" title="Tongue sticking out" class="smilie smilie_24" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[TaEL:  Troops and Enemies Loot]]></title>
			<link>https://www.save-point.org/thread-13291.html</link>
			<pubDate>Sun, 26 Oct 2025 00:53:24 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.save-point.org/member.php?action=profile&uid=5">DerVVulfman</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.save-point.org/thread-13291.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">TROOPS and ENEMIES LOOT</span></span><br />
<span style="font-size: medium;" class="mycode_size">Version: Beta 0.1</span></div>
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Introduction</span></span><br />
<br />
Early works of a system that allow enemy troops to have Item bags/loot in the same way that the party stores items and goods found.  Theoretically, enemies may eventually be able to use items out of the Troops database haul of items in the way they can use spells, and the way party members can use items.<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Features</span></span><br />
<ul class="mycode_list"><li>Can add items, weapons and armor into individual Troops database records allowing for more item drops.<br />
</li>
<li>Can add bonus gold and experience points for Troops. <br />
</li>
<li>Rewritten Battle Result window showing quantity of item(s) instead of repeating the same item(s) over and over.<br />
</li>
<li>Rewrites and breaks down a method in Scene_Battle which could be enhanced for more treasure bonus effects.<br />
</li>
</ul>
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Screenshots</span></span><br />
<br />
None.  I mean, I did tweak the Battle Result screen a little so it can show items and qty like ... Potion   3  ... rather than Potion Potion Potion.<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Demo</span></span><br />
<br />
Re-uploaded.  Despite not having an issue with extractng the original zip file, I re-compressed the .zip file and added a .rar file<br />

<br />
<img src="https://www.save-point.org/images/attachtypes/zip.gif" title="ZIP File" border="0" alt=".zip" />
&nbsp;&nbsp;<a href="attachment.php?aid=3009" target="_blank" title="">TaEL.zip</a> (Size: 924.22 KB / Downloads: 163)
<br />

<br />
<img src="https://www.save-point.org/images/attachtypes/rar.png" title="" border="0" alt=".rar" />
&nbsp;&nbsp;<a href="attachment.php?aid=3010" target="_blank" title="">TaEL.rar</a> (Size: 913.31 KB / Downloads: 169)
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Script</span></span><br />
<br />
Nope.   But it isn't big.<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Instructions</span></span><br />
<br />
It IS a beta edition...   Copy all four scripts in order.  Update the TaEL module at your leisure.  I added "WORDS" in it so you don't have to edit the actual script content.<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Compatibility</span></span><br />
<br />
It will NOT work with any custom BattleResult window, nor any script that modifies a  phase5 method in Scene_Battle<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Terms and Conditions</span></span><br />
<br />
My terms... Simple.  Due credit.  Can be used in any product, free or commercial.<br />
<br />
Just note, this is a beta version and I plan to have fun some time later.]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">TROOPS and ENEMIES LOOT</span></span><br />
<span style="font-size: medium;" class="mycode_size">Version: Beta 0.1</span></div>
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Introduction</span></span><br />
<br />
Early works of a system that allow enemy troops to have Item bags/loot in the same way that the party stores items and goods found.  Theoretically, enemies may eventually be able to use items out of the Troops database haul of items in the way they can use spells, and the way party members can use items.<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Features</span></span><br />
<ul class="mycode_list"><li>Can add items, weapons and armor into individual Troops database records allowing for more item drops.<br />
</li>
<li>Can add bonus gold and experience points for Troops. <br />
</li>
<li>Rewritten Battle Result window showing quantity of item(s) instead of repeating the same item(s) over and over.<br />
</li>
<li>Rewrites and breaks down a method in Scene_Battle which could be enhanced for more treasure bonus effects.<br />
</li>
</ul>
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Screenshots</span></span><br />
<br />
None.  I mean, I did tweak the Battle Result screen a little so it can show items and qty like ... Potion   3  ... rather than Potion Potion Potion.<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Demo</span></span><br />
<br />
Re-uploaded.  Despite not having an issue with extractng the original zip file, I re-compressed the .zip file and added a .rar file<br />

<br />
<img src="https://www.save-point.org/images/attachtypes/zip.gif" title="ZIP File" border="0" alt=".zip" />
&nbsp;&nbsp;<a href="attachment.php?aid=3009" target="_blank" title="">TaEL.zip</a> (Size: 924.22 KB / Downloads: 163)
<br />

<br />
<img src="https://www.save-point.org/images/attachtypes/rar.png" title="" border="0" alt=".rar" />
&nbsp;&nbsp;<a href="attachment.php?aid=3010" target="_blank" title="">TaEL.rar</a> (Size: 913.31 KB / Downloads: 169)
<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Script</span></span><br />
<br />
Nope.   But it isn't big.<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Instructions</span></span><br />
<br />
It IS a beta edition...   Copy all four scripts in order.  Update the TaEL module at your leisure.  I added "WORDS" in it so you don't have to edit the actual script content.<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Compatibility</span></span><br />
<br />
It will NOT work with any custom BattleResult window, nor any script that modifies a  phase5 method in Scene_Battle<br />
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Terms and Conditions</span></span><br />
<br />
My terms... Simple.  Due credit.  Can be used in any product, free or commercial.<br />
<br />
Just note, this is a beta version and I plan to have fun some time later.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[KAnimal XP]]></title>
			<link>https://www.save-point.org/thread-13290.html</link>
			<pubDate>Fri, 24 Oct 2025 02:35:49 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.save-point.org/member.php?action=profile&uid=1471">kyonides</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.save-point.org/thread-13290.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-size: x-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">KAnimal XP</span></span></div>
<br />
<div style="text-align: center;" class="mycode_align"><span style="font-style: italic;" class="mycode_i">Now available here because you NEVER wanted to become a <img src="https://www.save-point.org/images/smilies/ejlol/frog.gif" alt="Frog" title="Frog" class="smilie smilie_236" /> toad or a <img src="https://www.save-point.org/images/smilies/ejlol/cat.gif" alt="Cat" title="Cat" class="smilie smilie_117" /> cat or a <img src="https://www.save-point.org/images/smilies/ejlol/dog.gif" alt="Dog" title="Dog" class="smilie smilie_159" /> dog!</span></div>
<br />
<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">by Kyonides</span></span></div>
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Introduction</span></span><br />
<br />
I think this is self evident by now, the scriptlet will allow you to create some intriguing Animal skill + state combo.<br />
The script will work while you're walking on the map or even fighting some reckless ghosts! <img src="https://www.save-point.org/images/smilies/ejlol/ghost.gif" alt="Ghost" title="Ghost" class="smilie smilie_86" /><br />
<br />
<div style="text-align: center;" class="mycode_align"><span style="font-size: x-large;" class="mycode_size">Download the </span><span style="font-weight: bold;" class="mycode_b"><span style="font-size: x-large;" class="mycode_size"><a href="https://www.mediafire.com/folder/gcfhu9v7so2th/KAnimal" target="_blank" rel="noopener" class="mycode_url">DEMO</a></span></span></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Note:</span><br />
<br />
I had published a previous script called KToad XP that I simply modified to allow you to add more than one animal skill on RMXP.<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Terms &amp; Conditions</span></span><br />
<br />
Free for use in any game.<br />
Include my nickname in your game credits.<br />
Mention this forum as well.<br />
Give me a free copy of your finished game if you include 2 or more scripts of mine!]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-size: x-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">KAnimal XP</span></span></div>
<br />
<div style="text-align: center;" class="mycode_align"><span style="font-style: italic;" class="mycode_i">Now available here because you NEVER wanted to become a <img src="https://www.save-point.org/images/smilies/ejlol/frog.gif" alt="Frog" title="Frog" class="smilie smilie_236" /> toad or a <img src="https://www.save-point.org/images/smilies/ejlol/cat.gif" alt="Cat" title="Cat" class="smilie smilie_117" /> cat or a <img src="https://www.save-point.org/images/smilies/ejlol/dog.gif" alt="Dog" title="Dog" class="smilie smilie_159" /> dog!</span></div>
<br />
<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">by Kyonides</span></span></div>
<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Introduction</span></span><br />
<br />
I think this is self evident by now, the scriptlet will allow you to create some intriguing Animal skill + state combo.<br />
The script will work while you're walking on the map or even fighting some reckless ghosts! <img src="https://www.save-point.org/images/smilies/ejlol/ghost.gif" alt="Ghost" title="Ghost" class="smilie smilie_86" /><br />
<br />
<div style="text-align: center;" class="mycode_align"><span style="font-size: x-large;" class="mycode_size">Download the </span><span style="font-weight: bold;" class="mycode_b"><span style="font-size: x-large;" class="mycode_size"><a href="https://www.mediafire.com/folder/gcfhu9v7so2th/KAnimal" target="_blank" rel="noopener" class="mycode_url">DEMO</a></span></span></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Note:</span><br />
<br />
I had published a previous script called KToad XP that I simply modified to allow you to add more than one animal skill on RMXP.<br />
<br />
<span style="font-size: medium;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Terms &amp; Conditions</span></span><br />
<br />
Free for use in any game.<br />
Include my nickname in your game credits.<br />
Mention this forum as well.<br />
Give me a free copy of your finished game if you include 2 or more scripts of mine!]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Bless & Kurse XP]]></title>
			<link>https://www.save-point.org/thread-13014.html</link>
			<pubDate>Sun, 21 Sep 2025 23:16:32 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.save-point.org/member.php?action=profile&uid=1471">kyonides</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.save-point.org/thread-13014.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Bless &amp; Kurse XP</span></span></div>
<br />
<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">by Kyonides</span></span></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Introduction</span><br />
<br />
Cast a skill or consume an item that will summon some unknown being <img src="https://www.save-point.org/images/smilies/ejlol/clarkkent.gif" alt="Clark Kent" title="Clark Kent" class="smilie smilie_246" /> <img src="https://www.save-point.org/images/smilies/ejlol/ghost.gif" alt="Ghost" title="Ghost" class="smilie smilie_86" /> with its own agenda.<br />
Will the heroes or the troopers be blessed or cursed by that mysterious meddler? <img src="https://www.save-point.org/images/smilies/ejlol/confused.gif" alt="Confused" title="Confused" class="smilie smilie_39" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">NOTES</span><br />
<br />
Set <span style="font-weight: bold;" class="mycode_b">ITEM_ID or SKILL_ID</span> to 0 if you wish to disable any of them.<br />
<span style="font-weight: bold;" class="mycode_b">ENEMY_AS_SUMMON_IDS</span> holds the ID's for a good and a evil being (an enemy in the DB).<br />
<br />
<div class="tborder">
  			<div class="thead" style="padding:4px; margin:1px;"><input type="button" class="button" value="+" style="font-family:Monospace; padding:0px" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].style.display=='none'){ this.parentNode.parentNode.getElementsByTagName('div')[1].style.display='';this.value='-';} else {this.parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.value='+';}"/> 2 Screenshots</div>
  			<div class="trow2" style="display:none; padding:4px; margin:1px;">
<img src="https://i.postimg.cc/YSHdWhJt/blessnkurse-xp01.jpg" loading="lazy"  alt="[Image: blessnkurse-xp01.jpg]" class="mycode_img" /><br />
<img src="https://i.postimg.cc/fbfBjMNm/blessnkurse-xp02.jpg" loading="lazy"  alt="[Image: blessnkurse-xp02.jpg]" class="mycode_img" /><br />
</div>
		</div>
<br />
<div class="tborder">
  			<div class="thead" style="padding:4px; margin:1px;"><input type="button" class="button" value="+" style="font-family:Monospace; padding:0px" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].style.display=='none'){ this.parentNode.parentNode.getElementsByTagName('div')[1].style.display='';this.value='-';} else {this.parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.value='+';}"/> The Script</div>
  			<div class="trow2" style="display:none; padding:4px; margin:1px;">
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># * Bless &amp; Kurse XP * #<br />
# - Not a Plug &amp; Play Script - #<br />
#   Scripter : Kyonides<br />
#   v1.0.0 - 2025-09-24<br />
<br />
# Cast a skill or consume an item that will summon some unknown being with<br />
# its own agenda. Will the heroes or the troopers be blessed or cursed by<br />
# that mysterious meddler?<br />
<br />
# Set ITEM_ID or SKILL_ID to 0 if you wish to disable any of them.<br />
# ENEMY_AS_SUMMON_IDS holds the ID's for a good and a evil being, both are<br />
# enemies available on the DB.<br />
<br />
module BlessKurse<br />
  ITEM_ID  = 0<br />
  SKILL_ID = 24<br />
  ENEMY_AS_SUMMON_IDS = { :good =&gt; 24, :evil =&gt; 23, :meh =&gt; 20 }<br />
  ITEM_PERCENT  = { :dmg =&gt; 80,  :heal =&gt; 150 }<br />
  SKILL_PERCENT = { :dmg =&gt; 120, :heal =&gt; 100 }<br />
<br />
  module BKBattler<br />
    def base_maxhp() 100 end<br />
    def base_maxsp() 100 end<br />
    attr_accessor :battler_name, :battler_hue<br />
    attr_accessor :screen_x, :screen_y, :screen_z<br />
  end<br />
<br />
  module BKSprite<br />
    def summon!<br />
      @battler_name = @battler.battler_name<br />
      @battler_hue = @battler.battler_hue<br />
      self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)<br />
      @width = bitmap.width<br />
      @height = bitmap.height<br />
      @battler.screen_x = (640 - @width) / 2<br />
      @battler.screen_y = (320 - @height) / 2<br />
      self.x = @battler.screen_x<br />
      self.y = @battler.screen_y<br />
      self.z = @battler.screen_z<br />
      self.opacity = 255<br />
      self.visible = true<br />
      @battler_visible = true<br />
    end<br />
  end<br />
end<br />
<br />
module RPG<br />
  class Item<br />
    def recover_list<br />
      [@recover_hp, @recover_hp_rate, @recover_sp, @recover_sp_rate]<br />
    end<br />
  end<br />
end<br />
<br />
class Spriteset_Battle<br />
  def make_bk_summon(summon)<br />
    summon.screen_z = @enemy_sprites[-1].z - 50<br />
    @bk_summon = Sprite_Battler.new(@viewport1, summon)<br />
    @enemy_sprites &lt;&lt; @bk_summon<br />
    @bk_summon.extend BlessKurse::BKSprite<br />
    @bk_summon.summon!<br />
  end<br />
<br />
  def dispose_bk_summon<br />
    @bk_summon.dispose<br />
    @enemy_sprites.pop<br />
  end<br />
end<br />
<br />
class Scene_Battle<br />
  alias :kyon_bless_kurse_scn_btl_st_trgt_btlrs :set_target_battlers<br />
  alias :kyon_bless_kurse_scn_btl_mk_skl_act_res :make_skill_action_result<br />
  alias :kyon_bless_kurse_scn_btl_mk_itm_act_res :make_item_action_result<br />
  alias :kyon_bless_kurse_scn_btl_up_ph4_stp3 :update_phase4_step3<br />
  alias :kyon_bless_kurse_scn_btl_up_ph4_stp4 :update_phase4_step4<br />
  alias :kyon_bless_kurse_scn_btl_up_ph4_stp5 :update_phase4_step5<br />
  alias :kyon_bless_kurse_scn_btl_up_ph4_stp6 :update_phase4_step6<br />
  def set_target_battlers(scope)<br />
    change_bk_item_skill<br />
    kyon_bless_kurse_scn_btl_st_trgt_btlrs(scope)<br />
  end<br />
<br />
  def change_bk_sign<br />
    @bk_neutral = rand(100) &lt; 50<br />
    @bk_sign = rand(100) &lt; 50 ? 1 : -1<br />
  end<br />
<br />
  def change_bk_item_skill<br />
    return if @bless_kurse<br />
    if @skill<br />
      return if BlessKurse::SKILL_ID != @skill.id<br />
      @old_skill = @skill.dup<br />
      change_bk_sign<br />
      change_bk_skill_power<br />
    else<br />
      return if BlessKurse::ITEM_ID != @item.id<br />
      @old_item = @item.dup<br />
      change_bk_sign<br />
      change_bk_item_power<br />
    end<br />
    @bless_kurse = true<br />
  end<br />
<br />
  def change_bk_skill_power<br />
    @skill = @old_skill.dup<br />
    value = @bk_sign * @skill.power<br />
    key = value &gt; 0 ? :dmg : :heal<br />
    percent = BlessKurse::SKILL_PERCENT[key]<br />
    @skill.power = value * percent / 100<br />
  end<br />
<br />
  def change_bk_item_power<br />
    @item = @old_item.dup<br />
    perc = BlessKurse::ITEM_PERCENT<br />
    key = @bk_sign * @item.recover_hp &gt;= 0 ? :heal : :dmg<br />
    @item.recover_hp = @bk_sign * @item.recover_hp * perc[key] / 100<br />
    key = @bk_sign * @item.recover_hp_rate &gt;= 0 ? :heal : :dmg<br />
    @item.recover_hp_rate = @bk_sign * @item.recover_hp_rate * perc[key] / 100<br />
    key = @bk_sign * @item.recover_sp &gt;= 0 ? :heal : :dmg<br />
    @item.recover_sp = @bk_sign * @item.recover_sp * perc[key] / 100<br />
    key = @bk_sign * @item.recover_sp_rate &gt;= 0 ? :heal : :dmg<br />
    @item.recover_sp_rate = @bk_sign * @item.recover_sp_rate * perc[key] / 100<br />
    value = @item.recover_list.inject {|a,b| a + b }<br />
    @bk_heal = (@bk_sign * value &gt; 0)<br />
  end<br />
<br />
  def make_skill_action_result<br />
    kyon_bless_kurse_scn_btl_mk_skl_act_res<br />
    make_skill_bk_action_result<br />
  end<br />
<br />
  def make_skill_bk_action_result<br />
    return if @phase4_step == 1 or !@bless_kurse<br />
    case @skill.scope<br />
    when 2<br />
      summon_key = @skill.power &lt; 0 ? :evil : :good<br />
    when 4<br />
      summon_key = @skill.power &lt; 0 ? :good : :evil<br />
    end<br />
    @skill = @old_skill<br />
    if @bk_neutral<br />
      summon_key = :meh<br />
    else<br />
      @bk_sign *= -1<br />
    end<br />
    @bk_summon_id = BlessKurse::ENEMY_AS_SUMMON_IDS[summon_key]<br />
    change_bk_skill_power<br />
    battler = @active_battler<br />
    @old_targets = @target_battlers<br />
    scope = @skill.scope == 2 ? 4 : 2<br />
    @target_battlers = []<br />
    set_target_battlers(scope)<br />
    @bk_battlers = @target_battlers<br />
    @bk_battlers.each {|target| target.skill_effect(battler, @skill) }<br />
    @target_battlers = @old_targets<br />
    @old_skill = @bk_sign = nil<br />
  end<br />
<br />
  def make_item_action_result<br />
    kyon_bless_kurse_scn_btl_mk_itm_act_res<br />
    return if @phase4_step == 1 or !@bless_kurse<br />
    make_item_bk_action_result<br />
  end<br />
<br />
  def make_item_bk_action_result<br />
    return if @phase4_step == 1 or !@bless_kurse<br />
    case @item.scope<br />
    when 2<br />
      summon_key = @bk_heal ? :evil : :good<br />
    when 4<br />
      summon_key = @bk_heal ? :good : :evil<br />
    end<br />
    @item = @old_item<br />
    if @bk_neutral<br />
      summon_key = :meh<br />
    else<br />
      @bk_sign *= -1<br />
    end<br />
    @bk_summon_id = BlessKurse::ENEMY_AS_SUMMON_IDS[summon_key]<br />
    change_bk_item_power<br />
    @old_targets = @target_battlers<br />
    scope = @item.scope == 2 ? 4 : 2<br />
    @target_battlers = []<br />
    set_target_battlers(scope)<br />
    @bk_battlers = @target_battlers<br />
    @bk_battlers.each {|target| target.item_effect(@item) }<br />
    @target_battlers = @old_targets<br />
    @old_item = @bk_sign = nil<br />
  end<br />
<br />
  def update_phase4_step3<br />
    kyon_bless_kurse_scn_btl_up_ph4_stp3<br />
    make_bless_kurse_summon<br />
  end<br />
<br />
  def make_bless_kurse_summon<br />
    return unless @bless_kurse<br />
    summon = &#36;data_enemies[@bk_summon_id]<br />
    unless @bk_summon<br />
      @bk_summon = Game_Battler.new<br />
      @bk_summon.extend BlessKurse::BKBattler<br />
      @bk_summon.hp = 100000<br />
    end<br />
    @bk_summon.hidden = false<br />
    @bk_summon.battler_name = summon.battler_name<br />
    @bk_summon.battler_hue = summon.battler_hue<br />
    @spriteset.make_bk_summon(@bk_summon)<br />
    if @animation1_id == 0<br />
      @bk_summon.white_flash = true<br />
    else<br />
      @bk_summon.animation_id = @animation1_id<br />
      @bk_summon.animation_hit = true<br />
    end<br />
  end<br />
<br />
  def update_phase4_step4<br />
    kyon_bless_kurse_scn_btl_up_ph4_stp4<br />
    return unless @bless_kurse<br />
    for target in @bk_battlers<br />
      target.animation_id = @animation2_id<br />
      target.animation_hit = (target.damage != "Miss")<br />
    end<br />
  end<br />
<br />
  def update_phase4_step5<br />
    kyon_bless_kurse_scn_btl_up_ph4_stp5<br />
    bk_summon_exit<br />
  end<br />
<br />
  def bk_summon_exit<br />
    return unless @bless_kurse<br />
    @bk_battlers.each {|target| target.damage_pop = target.damage != nil }<br />
    @bk_summon.hidden = true<br />
    @bk_battlers.clear<br />
  end<br />
<br />
  def update_phase4_step6<br />
    kyon_bless_kurse_scn_btl_up_ph4_stp6<br />
    bk_dispose_summon<br />
  end<br />
<br />
  def bk_dispose_summon<br />
    return unless @bless_kurse<br />
    @spriteset.dispose_bk_summon<br />
    @bless_kurse = @bk_heal = @bk_summon_id = nil<br />
  end<br />
end</code></div></div></div>
		</div>
<br />
<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: x-large;" class="mycode_size"><a href="https://www.mediafire.com/folder/3mh0vgns0bsvn/BlessNKurse" target="_blank" rel="noopener" class="mycode_url">DOWNLOAD DEMO NOW!</a></span></span></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Terms &amp; Conditions</span><br />
<br />
Free as in <img src="https://www.save-point.org/images/smilies/ejlol/beer.gif" alt="Beer" title="Beer" class="smilie smilie_189" /> beer for non commercial games. <img src="https://www.save-point.org/images/smilies/ejlol/gamer.gif" alt="Gamer" title="Gamer" class="smilie smilie_183" /><br />
Include my nickname in your game credits.<br />
Mention this forum in your game credits as well.<br />
That's it! <img src="https://www.save-point.org/images/smilies/ejlol/tongue.gif" alt="Tongue sticking out" title="Tongue sticking out" class="smilie smilie_24" />]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Bless &amp; Kurse XP</span></span></div>
<br />
<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">by Kyonides</span></span></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Introduction</span><br />
<br />
Cast a skill or consume an item that will summon some unknown being <img src="https://www.save-point.org/images/smilies/ejlol/clarkkent.gif" alt="Clark Kent" title="Clark Kent" class="smilie smilie_246" /> <img src="https://www.save-point.org/images/smilies/ejlol/ghost.gif" alt="Ghost" title="Ghost" class="smilie smilie_86" /> with its own agenda.<br />
Will the heroes or the troopers be blessed or cursed by that mysterious meddler? <img src="https://www.save-point.org/images/smilies/ejlol/confused.gif" alt="Confused" title="Confused" class="smilie smilie_39" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">NOTES</span><br />
<br />
Set <span style="font-weight: bold;" class="mycode_b">ITEM_ID or SKILL_ID</span> to 0 if you wish to disable any of them.<br />
<span style="font-weight: bold;" class="mycode_b">ENEMY_AS_SUMMON_IDS</span> holds the ID's for a good and a evil being (an enemy in the DB).<br />
<br />
<div class="tborder">
  			<div class="thead" style="padding:4px; margin:1px;"><input type="button" class="button" value="+" style="font-family:Monospace; padding:0px" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].style.display=='none'){ this.parentNode.parentNode.getElementsByTagName('div')[1].style.display='';this.value='-';} else {this.parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.value='+';}"/> 2 Screenshots</div>
  			<div class="trow2" style="display:none; padding:4px; margin:1px;">
<img src="https://i.postimg.cc/YSHdWhJt/blessnkurse-xp01.jpg" loading="lazy"  alt="[Image: blessnkurse-xp01.jpg]" class="mycode_img" /><br />
<img src="https://i.postimg.cc/fbfBjMNm/blessnkurse-xp02.jpg" loading="lazy"  alt="[Image: blessnkurse-xp02.jpg]" class="mycode_img" /><br />
</div>
		</div>
<br />
<div class="tborder">
  			<div class="thead" style="padding:4px; margin:1px;"><input type="button" class="button" value="+" style="font-family:Monospace; padding:0px" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].style.display=='none'){ this.parentNode.parentNode.getElementsByTagName('div')[1].style.display='';this.value='-';} else {this.parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.value='+';}"/> The Script</div>
  			<div class="trow2" style="display:none; padding:4px; margin:1px;">
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># * Bless &amp; Kurse XP * #<br />
# - Not a Plug &amp; Play Script - #<br />
#   Scripter : Kyonides<br />
#   v1.0.0 - 2025-09-24<br />
<br />
# Cast a skill or consume an item that will summon some unknown being with<br />
# its own agenda. Will the heroes or the troopers be blessed or cursed by<br />
# that mysterious meddler?<br />
<br />
# Set ITEM_ID or SKILL_ID to 0 if you wish to disable any of them.<br />
# ENEMY_AS_SUMMON_IDS holds the ID's for a good and a evil being, both are<br />
# enemies available on the DB.<br />
<br />
module BlessKurse<br />
  ITEM_ID  = 0<br />
  SKILL_ID = 24<br />
  ENEMY_AS_SUMMON_IDS = { :good =&gt; 24, :evil =&gt; 23, :meh =&gt; 20 }<br />
  ITEM_PERCENT  = { :dmg =&gt; 80,  :heal =&gt; 150 }<br />
  SKILL_PERCENT = { :dmg =&gt; 120, :heal =&gt; 100 }<br />
<br />
  module BKBattler<br />
    def base_maxhp() 100 end<br />
    def base_maxsp() 100 end<br />
    attr_accessor :battler_name, :battler_hue<br />
    attr_accessor :screen_x, :screen_y, :screen_z<br />
  end<br />
<br />
  module BKSprite<br />
    def summon!<br />
      @battler_name = @battler.battler_name<br />
      @battler_hue = @battler.battler_hue<br />
      self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)<br />
      @width = bitmap.width<br />
      @height = bitmap.height<br />
      @battler.screen_x = (640 - @width) / 2<br />
      @battler.screen_y = (320 - @height) / 2<br />
      self.x = @battler.screen_x<br />
      self.y = @battler.screen_y<br />
      self.z = @battler.screen_z<br />
      self.opacity = 255<br />
      self.visible = true<br />
      @battler_visible = true<br />
    end<br />
  end<br />
end<br />
<br />
module RPG<br />
  class Item<br />
    def recover_list<br />
      [@recover_hp, @recover_hp_rate, @recover_sp, @recover_sp_rate]<br />
    end<br />
  end<br />
end<br />
<br />
class Spriteset_Battle<br />
  def make_bk_summon(summon)<br />
    summon.screen_z = @enemy_sprites[-1].z - 50<br />
    @bk_summon = Sprite_Battler.new(@viewport1, summon)<br />
    @enemy_sprites &lt;&lt; @bk_summon<br />
    @bk_summon.extend BlessKurse::BKSprite<br />
    @bk_summon.summon!<br />
  end<br />
<br />
  def dispose_bk_summon<br />
    @bk_summon.dispose<br />
    @enemy_sprites.pop<br />
  end<br />
end<br />
<br />
class Scene_Battle<br />
  alias :kyon_bless_kurse_scn_btl_st_trgt_btlrs :set_target_battlers<br />
  alias :kyon_bless_kurse_scn_btl_mk_skl_act_res :make_skill_action_result<br />
  alias :kyon_bless_kurse_scn_btl_mk_itm_act_res :make_item_action_result<br />
  alias :kyon_bless_kurse_scn_btl_up_ph4_stp3 :update_phase4_step3<br />
  alias :kyon_bless_kurse_scn_btl_up_ph4_stp4 :update_phase4_step4<br />
  alias :kyon_bless_kurse_scn_btl_up_ph4_stp5 :update_phase4_step5<br />
  alias :kyon_bless_kurse_scn_btl_up_ph4_stp6 :update_phase4_step6<br />
  def set_target_battlers(scope)<br />
    change_bk_item_skill<br />
    kyon_bless_kurse_scn_btl_st_trgt_btlrs(scope)<br />
  end<br />
<br />
  def change_bk_sign<br />
    @bk_neutral = rand(100) &lt; 50<br />
    @bk_sign = rand(100) &lt; 50 ? 1 : -1<br />
  end<br />
<br />
  def change_bk_item_skill<br />
    return if @bless_kurse<br />
    if @skill<br />
      return if BlessKurse::SKILL_ID != @skill.id<br />
      @old_skill = @skill.dup<br />
      change_bk_sign<br />
      change_bk_skill_power<br />
    else<br />
      return if BlessKurse::ITEM_ID != @item.id<br />
      @old_item = @item.dup<br />
      change_bk_sign<br />
      change_bk_item_power<br />
    end<br />
    @bless_kurse = true<br />
  end<br />
<br />
  def change_bk_skill_power<br />
    @skill = @old_skill.dup<br />
    value = @bk_sign * @skill.power<br />
    key = value &gt; 0 ? :dmg : :heal<br />
    percent = BlessKurse::SKILL_PERCENT[key]<br />
    @skill.power = value * percent / 100<br />
  end<br />
<br />
  def change_bk_item_power<br />
    @item = @old_item.dup<br />
    perc = BlessKurse::ITEM_PERCENT<br />
    key = @bk_sign * @item.recover_hp &gt;= 0 ? :heal : :dmg<br />
    @item.recover_hp = @bk_sign * @item.recover_hp * perc[key] / 100<br />
    key = @bk_sign * @item.recover_hp_rate &gt;= 0 ? :heal : :dmg<br />
    @item.recover_hp_rate = @bk_sign * @item.recover_hp_rate * perc[key] / 100<br />
    key = @bk_sign * @item.recover_sp &gt;= 0 ? :heal : :dmg<br />
    @item.recover_sp = @bk_sign * @item.recover_sp * perc[key] / 100<br />
    key = @bk_sign * @item.recover_sp_rate &gt;= 0 ? :heal : :dmg<br />
    @item.recover_sp_rate = @bk_sign * @item.recover_sp_rate * perc[key] / 100<br />
    value = @item.recover_list.inject {|a,b| a + b }<br />
    @bk_heal = (@bk_sign * value &gt; 0)<br />
  end<br />
<br />
  def make_skill_action_result<br />
    kyon_bless_kurse_scn_btl_mk_skl_act_res<br />
    make_skill_bk_action_result<br />
  end<br />
<br />
  def make_skill_bk_action_result<br />
    return if @phase4_step == 1 or !@bless_kurse<br />
    case @skill.scope<br />
    when 2<br />
      summon_key = @skill.power &lt; 0 ? :evil : :good<br />
    when 4<br />
      summon_key = @skill.power &lt; 0 ? :good : :evil<br />
    end<br />
    @skill = @old_skill<br />
    if @bk_neutral<br />
      summon_key = :meh<br />
    else<br />
      @bk_sign *= -1<br />
    end<br />
    @bk_summon_id = BlessKurse::ENEMY_AS_SUMMON_IDS[summon_key]<br />
    change_bk_skill_power<br />
    battler = @active_battler<br />
    @old_targets = @target_battlers<br />
    scope = @skill.scope == 2 ? 4 : 2<br />
    @target_battlers = []<br />
    set_target_battlers(scope)<br />
    @bk_battlers = @target_battlers<br />
    @bk_battlers.each {|target| target.skill_effect(battler, @skill) }<br />
    @target_battlers = @old_targets<br />
    @old_skill = @bk_sign = nil<br />
  end<br />
<br />
  def make_item_action_result<br />
    kyon_bless_kurse_scn_btl_mk_itm_act_res<br />
    return if @phase4_step == 1 or !@bless_kurse<br />
    make_item_bk_action_result<br />
  end<br />
<br />
  def make_item_bk_action_result<br />
    return if @phase4_step == 1 or !@bless_kurse<br />
    case @item.scope<br />
    when 2<br />
      summon_key = @bk_heal ? :evil : :good<br />
    when 4<br />
      summon_key = @bk_heal ? :good : :evil<br />
    end<br />
    @item = @old_item<br />
    if @bk_neutral<br />
      summon_key = :meh<br />
    else<br />
      @bk_sign *= -1<br />
    end<br />
    @bk_summon_id = BlessKurse::ENEMY_AS_SUMMON_IDS[summon_key]<br />
    change_bk_item_power<br />
    @old_targets = @target_battlers<br />
    scope = @item.scope == 2 ? 4 : 2<br />
    @target_battlers = []<br />
    set_target_battlers(scope)<br />
    @bk_battlers = @target_battlers<br />
    @bk_battlers.each {|target| target.item_effect(@item) }<br />
    @target_battlers = @old_targets<br />
    @old_item = @bk_sign = nil<br />
  end<br />
<br />
  def update_phase4_step3<br />
    kyon_bless_kurse_scn_btl_up_ph4_stp3<br />
    make_bless_kurse_summon<br />
  end<br />
<br />
  def make_bless_kurse_summon<br />
    return unless @bless_kurse<br />
    summon = &#36;data_enemies[@bk_summon_id]<br />
    unless @bk_summon<br />
      @bk_summon = Game_Battler.new<br />
      @bk_summon.extend BlessKurse::BKBattler<br />
      @bk_summon.hp = 100000<br />
    end<br />
    @bk_summon.hidden = false<br />
    @bk_summon.battler_name = summon.battler_name<br />
    @bk_summon.battler_hue = summon.battler_hue<br />
    @spriteset.make_bk_summon(@bk_summon)<br />
    if @animation1_id == 0<br />
      @bk_summon.white_flash = true<br />
    else<br />
      @bk_summon.animation_id = @animation1_id<br />
      @bk_summon.animation_hit = true<br />
    end<br />
  end<br />
<br />
  def update_phase4_step4<br />
    kyon_bless_kurse_scn_btl_up_ph4_stp4<br />
    return unless @bless_kurse<br />
    for target in @bk_battlers<br />
      target.animation_id = @animation2_id<br />
      target.animation_hit = (target.damage != "Miss")<br />
    end<br />
  end<br />
<br />
  def update_phase4_step5<br />
    kyon_bless_kurse_scn_btl_up_ph4_stp5<br />
    bk_summon_exit<br />
  end<br />
<br />
  def bk_summon_exit<br />
    return unless @bless_kurse<br />
    @bk_battlers.each {|target| target.damage_pop = target.damage != nil }<br />
    @bk_summon.hidden = true<br />
    @bk_battlers.clear<br />
  end<br />
<br />
  def update_phase4_step6<br />
    kyon_bless_kurse_scn_btl_up_ph4_stp6<br />
    bk_dispose_summon<br />
  end<br />
<br />
  def bk_dispose_summon<br />
    return unless @bless_kurse<br />
    @spriteset.dispose_bk_summon<br />
    @bless_kurse = @bk_heal = @bk_summon_id = nil<br />
  end<br />
end</code></div></div></div>
		</div>
<br />
<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: x-large;" class="mycode_size"><a href="https://www.mediafire.com/folder/3mh0vgns0bsvn/BlessNKurse" target="_blank" rel="noopener" class="mycode_url">DOWNLOAD DEMO NOW!</a></span></span></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Terms &amp; Conditions</span><br />
<br />
Free as in <img src="https://www.save-point.org/images/smilies/ejlol/beer.gif" alt="Beer" title="Beer" class="smilie smilie_189" /> beer for non commercial games. <img src="https://www.save-point.org/images/smilies/ejlol/gamer.gif" alt="Gamer" title="Gamer" class="smilie smilie_183" /><br />
Include my nickname in your game credits.<br />
Mention this forum in your game credits as well.<br />
That's it! <img src="https://www.save-point.org/images/smilies/ejlol/tongue.gif" alt="Tongue sticking out" title="Tongue sticking out" class="smilie smilie_24" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Kuick Leader Swap XP]]></title>
			<link>https://www.save-point.org/thread-12791.html</link>
			<pubDate>Sun, 07 Sep 2025 17:35:35 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.save-point.org/member.php?action=profile&uid=1471">kyonides</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.save-point.org/thread-12791.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Kuick Leader Swap XP</span></span></div>
<br />
<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">by Kyonides</span></span></div>
<span style="font-weight: bold;" class="mycode_b">Introduction</span><br />
<br />
Once upon a gaming time, some forumer, who might have recently escaped from Minecraft for unknown reasons, wanted to easily swap the current party leader, not just by pressing the L or R button but also via direct assignment.<br />
<br />
<img src="https://www.save-point.org/images/smilies/ejlol/sweathappy.gif" alt="Happy with a sweat" title="Happy with a sweat" class="smilie smilie_31" /> Well, we don't know how accurate this legend might be, but this is the final outcome of that ancient story.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Script Calls</span><br />
<br />
Set a Temporary Leader:<br />
- RememberLeaderIndex? stands for a boolean value: <span style="font-weight: bold;" class="mycode_b">true</span> or <span style="font-weight: bold;" class="mycode_b">false</span>.<br />
- This new leader becomes permanent if RememberLeaderIndex? is false.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36;game_party.temp_leader(PartyIndex, RememberLeaderIndex?)</code></div></div><br />
Restore the Previous Leader (If Any):<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36;game_party.restore_leader</code></div></div><br />
Set a Leader by Actor's ID:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36;game_party.set_leader_by_id(ActorID)</code></div></div><br />
Set a Leader Randomly!<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36;game_party.set_random_leader!</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">L &amp; R Button-Related Script Calls</span><br />
<br />
Prevent the player from Swapping the current Leader:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36;game_party.keep_leader!</code></div></div><br />
Reenable the player to Swap the current Leader:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36;game_party.swap_leader!</code></div></div><br />
Check Current Keep Leader State - Returns either <span style="font-weight: bold;" class="mycode_b">true</span> or <span style="font-weight: bold;" class="mycode_b">false</span>:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36;game_party.keep_leader</code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">The Script</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># * Kuick Leader Swap XP * #<br />
#   Scripter : Kyonides<br />
#   v1.1.3 - 2025-09-29<br />
<br />
# * Script Calls * #<br />
<br />
# - Set a Temporary Leader!<br />
#   RememberLeaderIndex? stands for a boolean value: true or false.<br />
#   This new leader becomes permanent if RememberLeaderIndex? is false.<br />
# &#36;game_party.temp_leader(PartyIndex, RememberLeaderIndex?)<br />
<br />
# - Restore the Previous Leader! (If Any!)<br />
# &#36;game_party.restore_leader<br />
<br />
# - Set a Leader by Actor's ID!<br />
# &#36;game_party.set_leader_by_id(ActorID)<br />
<br />
# - Set a Leader Randomly!<br />
# &#36;game_party.set_random_leader!<br />
<br />
# * L &amp; R Button-Related Script Calls * #<br />
# - Prevent the player from Swapping the current Leader:<br />
# &#36;game_party.keep_leader!<br />
<br />
# - Reenable the player to Swap the current Leader:<br />
# &#36;game_party.swap_leader!<br />
<br />
# - Check Current Keep Leader State:<br />
# &#36;game_party.keep_leader (Returns: true or false)<br />
<br />
class Game_Party<br />
  def leader<br />
    @actors[0]<br />
  end<br />
<br />
  def keep_leader!<br />
    @keep_leader = true<br />
  end<br />
<br />
  def swap_leader!<br />
    @keep_leader = false<br />
    nil<br />
  end<br />
<br />
  def change_leader(n)<br />
    return if @keep_leader or @actors.empty?<br />
    if n &lt; 0<br />
      @actors.unshift @actors.pop<br />
    else<br />
      @actors &lt;&lt; @actors.shift<br />
    end<br />
  end<br />
<br />
  def set_leader_by_id(actor_id)<br />
    actor = &#36;game_actors[actor_id]<br />
    n = @actors.index(actor)<br />
    swap_leader(n) if n and n != 0<br />
  end<br />
<br />
  def set_random_leader!<br />
    n = rand(@actors.size)<br />
    swap_leader(n) if n and n != 0<br />
  end<br />
<br />
  def temp_leader(n, remember)<br />
    @temp_leader_index = n if remember<br />
    swap_leader(n)<br />
  end<br />
<br />
  def restore_leader<br />
    swap_leader(@temp_leader_index) if @temp_leader_index<br />
    @temp_leader_index = nil<br />
  end<br />
  private<br />
  def swap_leader(n)<br />
    @actors[0], @actors[n] = @actors[n], @actors[0]<br />
    &#36;game_player.refresh<br />
  end<br />
  attr_accessor :keep_leader<br />
end<br />
<br />
class Game_Player<br />
  alias :kyon_kuick_leader_swap_gm_plyr_up :update<br />
  def update<br />
    kyon_kuick_leader_swap_gm_plyr_up<br />
    if Input.trigger?(Input::L)<br />
      &#36;game_party.change_leader(-1)<br />
      refresh<br />
      return<br />
    elsif Input.trigger?(Input::R)<br />
      &#36;game_party.change_leader(1)<br />
      refresh<br />
    end<br />
  end<br />
end</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Terms &amp; Conditions</span><br />
<br />
Free as in <img src="https://www.save-point.org/images/smilies/ejlol/beer.gif" alt="Beer" title="Beer" class="smilie smilie_189" /> beer for any kind of <img src="https://www.save-point.org/images/smilies/ejlol/gamer.gif" alt="Gamer" title="Gamer" class="smilie smilie_183" /> games.<br />
Include my nickname in your game credits.<br />
Thank Ace_V for unwillingly inspiring me to <img src="https://www.save-point.org/images/smilies/ejlol/sculptor.gif" alt="Sculptor" title="Sculptor" class="smilie smilie_224" /> craft the script. (Just don't or else his PM box will get full any time soon. <img src="https://www.save-point.org/images/smilies/ejlol/confused.gif" alt="Confused" title="Confused" class="smilie smilie_39" /> )<br />
That's it! <img src="https://www.save-point.org/images/smilies/ejlol/tongue.gif" alt="Tongue sticking out" title="Tongue sticking out" class="smilie smilie_24" />]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Kuick Leader Swap XP</span></span></div>
<br />
<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">by Kyonides</span></span></div>
<span style="font-weight: bold;" class="mycode_b">Introduction</span><br />
<br />
Once upon a gaming time, some forumer, who might have recently escaped from Minecraft for unknown reasons, wanted to easily swap the current party leader, not just by pressing the L or R button but also via direct assignment.<br />
<br />
<img src="https://www.save-point.org/images/smilies/ejlol/sweathappy.gif" alt="Happy with a sweat" title="Happy with a sweat" class="smilie smilie_31" /> Well, we don't know how accurate this legend might be, but this is the final outcome of that ancient story.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Script Calls</span><br />
<br />
Set a Temporary Leader:<br />
- RememberLeaderIndex? stands for a boolean value: <span style="font-weight: bold;" class="mycode_b">true</span> or <span style="font-weight: bold;" class="mycode_b">false</span>.<br />
- This new leader becomes permanent if RememberLeaderIndex? is false.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36;game_party.temp_leader(PartyIndex, RememberLeaderIndex?)</code></div></div><br />
Restore the Previous Leader (If Any):<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36;game_party.restore_leader</code></div></div><br />
Set a Leader by Actor's ID:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36;game_party.set_leader_by_id(ActorID)</code></div></div><br />
Set a Leader Randomly!<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36;game_party.set_random_leader!</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">L &amp; R Button-Related Script Calls</span><br />
<br />
Prevent the player from Swapping the current Leader:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36;game_party.keep_leader!</code></div></div><br />
Reenable the player to Swap the current Leader:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36;game_party.swap_leader!</code></div></div><br />
Check Current Keep Leader State - Returns either <span style="font-weight: bold;" class="mycode_b">true</span> or <span style="font-weight: bold;" class="mycode_b">false</span>:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36;game_party.keep_leader</code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">The Script</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># * Kuick Leader Swap XP * #<br />
#   Scripter : Kyonides<br />
#   v1.1.3 - 2025-09-29<br />
<br />
# * Script Calls * #<br />
<br />
# - Set a Temporary Leader!<br />
#   RememberLeaderIndex? stands for a boolean value: true or false.<br />
#   This new leader becomes permanent if RememberLeaderIndex? is false.<br />
# &#36;game_party.temp_leader(PartyIndex, RememberLeaderIndex?)<br />
<br />
# - Restore the Previous Leader! (If Any!)<br />
# &#36;game_party.restore_leader<br />
<br />
# - Set a Leader by Actor's ID!<br />
# &#36;game_party.set_leader_by_id(ActorID)<br />
<br />
# - Set a Leader Randomly!<br />
# &#36;game_party.set_random_leader!<br />
<br />
# * L &amp; R Button-Related Script Calls * #<br />
# - Prevent the player from Swapping the current Leader:<br />
# &#36;game_party.keep_leader!<br />
<br />
# - Reenable the player to Swap the current Leader:<br />
# &#36;game_party.swap_leader!<br />
<br />
# - Check Current Keep Leader State:<br />
# &#36;game_party.keep_leader (Returns: true or false)<br />
<br />
class Game_Party<br />
  def leader<br />
    @actors[0]<br />
  end<br />
<br />
  def keep_leader!<br />
    @keep_leader = true<br />
  end<br />
<br />
  def swap_leader!<br />
    @keep_leader = false<br />
    nil<br />
  end<br />
<br />
  def change_leader(n)<br />
    return if @keep_leader or @actors.empty?<br />
    if n &lt; 0<br />
      @actors.unshift @actors.pop<br />
    else<br />
      @actors &lt;&lt; @actors.shift<br />
    end<br />
  end<br />
<br />
  def set_leader_by_id(actor_id)<br />
    actor = &#36;game_actors[actor_id]<br />
    n = @actors.index(actor)<br />
    swap_leader(n) if n and n != 0<br />
  end<br />
<br />
  def set_random_leader!<br />
    n = rand(@actors.size)<br />
    swap_leader(n) if n and n != 0<br />
  end<br />
<br />
  def temp_leader(n, remember)<br />
    @temp_leader_index = n if remember<br />
    swap_leader(n)<br />
  end<br />
<br />
  def restore_leader<br />
    swap_leader(@temp_leader_index) if @temp_leader_index<br />
    @temp_leader_index = nil<br />
  end<br />
  private<br />
  def swap_leader(n)<br />
    @actors[0], @actors[n] = @actors[n], @actors[0]<br />
    &#36;game_player.refresh<br />
  end<br />
  attr_accessor :keep_leader<br />
end<br />
<br />
class Game_Player<br />
  alias :kyon_kuick_leader_swap_gm_plyr_up :update<br />
  def update<br />
    kyon_kuick_leader_swap_gm_plyr_up<br />
    if Input.trigger?(Input::L)<br />
      &#36;game_party.change_leader(-1)<br />
      refresh<br />
      return<br />
    elsif Input.trigger?(Input::R)<br />
      &#36;game_party.change_leader(1)<br />
      refresh<br />
    end<br />
  end<br />
end</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Terms &amp; Conditions</span><br />
<br />
Free as in <img src="https://www.save-point.org/images/smilies/ejlol/beer.gif" alt="Beer" title="Beer" class="smilie smilie_189" /> beer for any kind of <img src="https://www.save-point.org/images/smilies/ejlol/gamer.gif" alt="Gamer" title="Gamer" class="smilie smilie_183" /> games.<br />
Include my nickname in your game credits.<br />
Thank Ace_V for unwillingly inspiring me to <img src="https://www.save-point.org/images/smilies/ejlol/sculptor.gif" alt="Sculptor" title="Sculptor" class="smilie smilie_224" /> craft the script. (Just don't or else his PM box will get full any time soon. <img src="https://www.save-point.org/images/smilies/ejlol/confused.gif" alt="Confused" title="Confused" class="smilie smilie_39" /> )<br />
That's it! <img src="https://www.save-point.org/images/smilies/ejlol/tongue.gif" alt="Tongue sticking out" title="Tongue sticking out" class="smilie smilie_24" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Super Skill Nerf XP]]></title>
			<link>https://www.save-point.org/thread-12789.html</link>
			<pubDate>Sat, 06 Sep 2025 20:23:20 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.save-point.org/member.php?action=profile&uid=1471">kyonides</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.save-point.org/thread-12789.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Super Skill Nerf XP</span></span></div>
<br />
<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">by Kyonides</span></span></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Introduction</span><br />
<br />
Nerf! Nerf! Nerf your favorite super duper skills!<br />
Yes, even up to the point where your heroes can only use them once per battle!<br />
Just add the Skill ID to the <span style="font-weight: bold;" class="mycode_b">ONLY_ONCE_SKILL_IDS</span> array and that's it!<br />
Or add it to the <span style="font-weight: bold;" class="mycode_b">ONLY_TWICE_SKILL_IDS</span> to cast the skill twice!<br />
<br />
Or Cool Them Down!<br />
Just add the Skill ID to the <span style="font-weight: bold;" class="mycode_b">COOLDOWN_SKILL_IDS</span> and how many turns that skill should not be used and that's it!<br />
<br />
<br />
Example:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>COOLDOWN_SKILL_IDS = { 12 =&gt; 2, 20 =&gt; 4 }</code></div></div><br />
And just in case you want to clear this skill use limit once per call:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36;game_party.clear_used_skills!</code></div></div><br />
Or if you prefer to clear the cooldowns altogether:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36;game_party.clear_skill_cooldowns!</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Version 1.3.x</span><br />
<br />
This release includes the ability to change the color of the skill name &amp; its cost based on how many turns are left.<br />
This feature can be modified by editing the constants found in the <span style="font-weight: bold;" class="mycode_b">SkillColor</span> module.<br />
<br />
<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: x-large;" class="mycode_size"><a href="https://www.mediafire.com/folder/ikqb7ktqumv2p/SuperSkillNerf" target="_blank" rel="noopener" class="mycode_url">DOWNLOAD DEMOS NOW!</a></span></span></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Terms &amp; Conditions</span><br />
<br />
<div style="text-align: left;" class="mycode_align">Free as in <img src="https://www.save-point.org/images/smilies/ejlol/beer.gif" alt="Beer" title="Beer" class="smilie smilie_189" /> beer for non commercial games. <img src="https://www.save-point.org/images/smilies/ejlol/gamer.gif" alt="Gamer" title="Gamer" class="smilie smilie_183" /></div>
<div style="text-align: left;" class="mycode_align">Include my nickname in your game credits.</div>
<div style="text-align: left;" class="mycode_align">Thank Opozorilo for making the script request. (Optional aka a Joke)</div>
That's it! <img src="https://www.save-point.org/images/smilies/ejlol/tongue.gif" alt="Tongue sticking out" title="Tongue sticking out" class="smilie smilie_24" />]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Super Skill Nerf XP</span></span></div>
<br />
<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">by Kyonides</span></span></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Introduction</span><br />
<br />
Nerf! Nerf! Nerf your favorite super duper skills!<br />
Yes, even up to the point where your heroes can only use them once per battle!<br />
Just add the Skill ID to the <span style="font-weight: bold;" class="mycode_b">ONLY_ONCE_SKILL_IDS</span> array and that's it!<br />
Or add it to the <span style="font-weight: bold;" class="mycode_b">ONLY_TWICE_SKILL_IDS</span> to cast the skill twice!<br />
<br />
Or Cool Them Down!<br />
Just add the Skill ID to the <span style="font-weight: bold;" class="mycode_b">COOLDOWN_SKILL_IDS</span> and how many turns that skill should not be used and that's it!<br />
<br />
<br />
Example:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>COOLDOWN_SKILL_IDS = { 12 =&gt; 2, 20 =&gt; 4 }</code></div></div><br />
And just in case you want to clear this skill use limit once per call:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36;game_party.clear_used_skills!</code></div></div><br />
Or if you prefer to clear the cooldowns altogether:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36;game_party.clear_skill_cooldowns!</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Version 1.3.x</span><br />
<br />
This release includes the ability to change the color of the skill name &amp; its cost based on how many turns are left.<br />
This feature can be modified by editing the constants found in the <span style="font-weight: bold;" class="mycode_b">SkillColor</span> module.<br />
<br />
<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: x-large;" class="mycode_size"><a href="https://www.mediafire.com/folder/ikqb7ktqumv2p/SuperSkillNerf" target="_blank" rel="noopener" class="mycode_url">DOWNLOAD DEMOS NOW!</a></span></span></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Terms &amp; Conditions</span><br />
<br />
<div style="text-align: left;" class="mycode_align">Free as in <img src="https://www.save-point.org/images/smilies/ejlol/beer.gif" alt="Beer" title="Beer" class="smilie smilie_189" /> beer for non commercial games. <img src="https://www.save-point.org/images/smilies/ejlol/gamer.gif" alt="Gamer" title="Gamer" class="smilie smilie_183" /></div>
<div style="text-align: left;" class="mycode_align">Include my nickname in your game credits.</div>
<div style="text-align: left;" class="mycode_align">Thank Opozorilo for making the script request. (Optional aka a Joke)</div>
That's it! <img src="https://www.save-point.org/images/smilies/ejlol/tongue.gif" alt="Tongue sticking out" title="Tongue sticking out" class="smilie smilie_24" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[KursedVictory XP]]></title>
			<link>https://www.save-point.org/thread-12769.html</link>
			<pubDate>Sat, 06 Sep 2025 05:07:15 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://www.save-point.org/member.php?action=profile&uid=1471">kyonides</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.save-point.org/thread-12769.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">KursedVictory XP</span></span></div>
<br />
<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">by Kyonides</span></span></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Introduction</span><br />
<br />
You will either love this scriptlet or just hate it. <img src="https://www.save-point.org/images/smilies/ejlol/laughing.gif" alt="Laughing" title="Laughing" class="smilie smilie_23" /><br />
Sometimes the heroes cannot simply obtain a flawless victory. That would be inconceivable! <img src="https://www.save-point.org/images/smilies/ejlol/credible.gif" alt="Incredible" title="Incredible" class="smilie smilie_232" /> <br />
Thus, they need some final punishment to make sure they learn their lesson! <img src="https://www.save-point.org/images/smilies/ejlol/serious.gif" alt="Serious" title="Serious" class="smilie smilie_50" /> <br />
<br />
Just add enemy ID's to the <span style="font-weight: bold;" class="mycode_b">ENEMY_IDS</span> constant to make this happen! <img src="https://www.save-point.org/images/smilies/ejlol/wink.gif" alt="Winking" title="Winking" class="smilie smilie_33" /> <br />
<br />
<div class="tborder">
  			<div class="thead" style="padding:4px; margin:1px;"><input type="button" class="button" value="+" style="font-family:Monospace; padding:0px" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].style.display=='none'){ this.parentNode.parentNode.getElementsByTagName('div')[1].style.display='';this.value='-';} else {this.parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.value='+';}"/> Screenshots</div>
  			<div class="trow2" style="display:none; padding:4px; margin:1px;">
<img src="https://i.postimg.cc/8Pn9ZYCD/kursedvictory-xp001.jpg" loading="lazy"  alt="[Image: kursedvictory-xp001.jpg]" class="mycode_img" /><br />
<img src="https://i.postimg.cc/4x7Mq1Kc/kursedvictory-xp002.jpg" loading="lazy"  alt="[Image: kursedvictory-xp002.jpg]" class="mycode_img" /><br />
<img src="https://i.postimg.cc/Y9rqbdjF/kursedvictory-xp003.jpg" loading="lazy"  alt="[Image: kursedvictory-xp003.jpg]" class="mycode_img" /><br />
<img src="https://i.postimg.cc/VkkFH7Y8/kursedvictory-xp004.jpg" loading="lazy"  alt="[Image: kursedvictory-xp004.jpg]" class="mycode_img" /><br />
<img src="https://i.postimg.cc/RZpTrcFn/kursedvictory-xp005.jpg" loading="lazy"  alt="[Image: kursedvictory-xp005.jpg]" class="mycode_img" /><br />
</div>
		</div>
<br />
<span style="font-weight: bold;" class="mycode_b">The Script</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># * KursedVictory XP * #<br />
#   Scripter : Kyonides<br />
#   v1.2.0 - 2025-09-09<br />
<br />
# Sometimes the heroes cannot simply obtain a flawless victory. Thus, they need<br />
# some final punishment to make sure they learn their lesson!<br />
<br />
# Just add enemy ID's to the ENEMY_IDS constant to make this happen!<br />
<br />
# Warning: If you refuse to comply, you might have to fight another troop...<br />
<br />
module KursedVictory<br />
  BGS = "Darkness"<br />
  CURSOR = "sword0132"<br />
  CURSOR_OY = 4<br />
  OPTION_BACKDROP = "box240"<br />
  MESSAGE = ["Flawless Victory!", "Now choose a curse victim!"]<br />
  OPTIONS = ["Comply", "Refuse"]<br />
  OUTCOME = ["You complied with the %s's demand.",<br />
             "You refused to listen to %s."]<br />
  CURSE_CHANCE = 100<br />
  WAIT_FRAMES = 40<br />
  ENEMY_IDS = [1]<br />
  ROUND2_ENEMY_IDS = {}<br />
  ROUND2_ENEMY_IDS[1] = { :name =&gt; "Basilisk", :troop_id =&gt; 3 }<br />
end<br />
<br />
class Game_Enemy<br />
  def curse_victory?<br />
    KursedVictory::ENEMY_IDS.include?(@enemy_id)<br />
  end<br />
end<br />
<br />
class Game_Party<br />
  def dead_members<br />
    @actors.select {|actor| actor.dead? }<br />
  end<br />
<br />
  def all_dead_now?<br />
    dead_members.size == @actors.size<br />
  end<br />
end<br />
<br />
class Game_Troop<br />
  def curse_flawless_victory?<br />
    enemy = @enemies.find {|enemy| enemy.curse_victory? }<br />
    enemy != nil<br />
  end<br />
end<br />
<br />
class CursedMessageWindow &lt; Window_Base<br />
  def initialize(wx, wy)<br />
    super(wx, wy, 280, 80)<br />
    self.contents = Bitmap.new(width - 32, height - 32)<br />
    refresh<br />
  end<br />
<br />
  def refresh<br />
    line1, line2 = KursedVictory::MESSAGE<br />
    font = self.contents.font<br />
    font.bold = true<br />
    font.color.set(220, 80, 0)<br />
    self.contents.draw_text(0, 0, width - 32, 24, line1, 1)<br />
    font.bold = false<br />
    font.color.set(255, 255, 255)<br />
    self.contents.draw_text(0, 24, width - 32, 24, line2, 1)<br />
  end<br />
end<br />
<br />
module KursedVictory<br />
  class TextBox<br />
    def initialize(pos, total, vp=nil)<br />
      @index = pos<br />
      @max = total<br />
      @row_max = 2<br />
      @col_max = 1<br />
      @viewport = vp<br />
      @backdrop = Sprite.new(vp)<br />
      @label = Sprite.new(vp)<br />
      @label.z = 50<br />
    end<br />
<br />
    def set_image(filename)<br />
      @filename = filename<br />
      set_bitmap<br />
      set_text_bitmap<br />
      reset_alignment<br />
    end<br />
<br />
    def set_bitmap<br />
      bitmap = RPG::Cache.picture(@filename)<br />
      @width = bitmap.width<br />
      @height = bitmap.height<br />
      @rect = bitmap.rect<br />
      @col_width = 640<br />
      @center_x = (@col_width - @width) / 2<br />
      @backdrop.bitmap = bitmap<br />
    end<br />
<br />
    def set_text_bitmap<br />
      @align_x = 1<br />
      @label.bitmap = Bitmap.new(@width, @height)<br />
    end<br />
<br />
    def set_align_xy<br />
      h = @height + 24<br />
      @backdrop.x = @center_x<br />
      @backdrop.y = 140 + @index * h<br />
    end<br />
<br />
    def reset_alignment<br />
      set_align_xy<br />
      @label.x = @backdrop.x<br />
      @label.y = @backdrop.y<br />
    end<br />
<br />
    def x<br />
      @backdrop.x<br />
    end<br />
<br />
    def y<br />
      @backdrop.y<br />
    end<br />
<br />
    def set_text(text)<br />
      @text = text<br />
      bit = @label.bitmap<br />
      bit.clear<br />
      bit.draw_text(@rect, text, @align_x)<br />
    end<br />
<br />
    def dispose<br />
      @label.bitmap.dispose<br />
      @label.dispose<br />
      @backdrop.bitmap.dispose<br />
      @backdrop.dispose<br />
    end<br />
    attr_reader :text<br />
  end<br />
<br />
  class Spriteset<br />
    def initialize<br />
      @curse_viewport = Viewport.new(0, 0, 640, 480)<br />
      @curse_viewport.z = 500<br />
      @curse_boxes = []<br />
      @curse_x = []<br />
      @curse_y = []<br />
      filename = KursedVictory::OPTION_BACKDROP<br />
      options = KursedVictory::OPTIONS<br />
      options.each_with_index do |choice, n|<br />
        box = KursedVictory::TextBox.new(n, options.size, @curse_viewport)<br />
        box.set_image(filename)<br />
        box.set_text(choice)<br />
        @curse_x &lt;&lt; box.x<br />
        @curse_y &lt;&lt; box.y + KursedVictory::CURSOR_OY<br />
        @curse_boxes &lt;&lt; box<br />
      end<br />
      @cursed_cursor = Sprite.new(@curse_viewport)<br />
      @cursed_cursor.x = @curse_x[0]<br />
      @cursed_cursor.y = @curse_y[0]<br />
      @cursed_cursor.bitmap = RPG::Cache.icon(KursedVictory::CURSOR)<br />
    end<br />
<br />
    def move_cursor(index)<br />
      @cursed_cursor.y = @curse_y[index]<br />
    end<br />
<br />
    def dispose<br />
      @curse_boxes.each {|box| box.dispose }<br />
      @cursed_cursor.bitmap.dispose<br />
      @cursed_cursor.dispose<br />
      @curse_viewport.dispose<br />
    end<br />
  end<br />
end<br />
<br />
class Scene_Battle<br />
  alias :kyon_kurvic_scn_btl_st_ph5 :start_phase5<br />
  alias :kyon_kurvic_scn_btl_up_ph5 :update_phase5<br />
  def start_phase5<br />
    process_cursed_victory<br />
    if @cursed_victory and &#36;game_party.all_dead_now?<br />
      process_defeat<br />
      return<br />
    end<br />
    kyon_kurvic_scn_btl_st_ph5<br />
  end<br />
<br />
  def update_phase5<br />
    if @curse_lifted and Input.trigger?(Input::C)<br />
      start_anti_curse_battle<br />
      return<br />
    end<br />
    kyon_kurvic_scn_btl_up_ph5<br />
  end<br />
<br />
  def start_anti_curse_battle<br />
    Audio.bgm_stop<br />
    Audio.bgs_stop<br />
    &#36;game_party.clear_actions<br />
    &#36;game_troop.enemies.clear<br />
    &#36;game_temp.battle_troop_id = @round2_data[:troop_id]<br />
    &#36;game_system.se_play(&#36;data_system.battle_start_se)<br />
    &#36;game_system.bgm_play(&#36;game_system.battle_bgm)<br />
    &#36;scene = Scene_Battle.new<br />
  end<br />
<br />
  def process_cursed_victory<br />
    return if KursedVictory::CURSE_CHANCE &lt; rand(100)<br />
    return unless &#36;game_troop.curse_flawless_victory?<br />
    return if &#36;game_party.dead_members.size &gt; 0<br />
    Audio.bgm_stop<br />
    @bgs = RPG::AudioFile.new(KursedVictory::BGS)<br />
    &#36;game_system.bgs_play(@bgs)<br />
    wx = (Graphics.width - 280) / 2<br />
    @cursed_message = CursedMessageWindow.new(wx, 32)<br />
    @round2_data = KursedVictory::ROUND2_ENEMY_IDS[@troop_id]<br />
    if @round2_data<br />
      process_cursed_victory_options<br />
      return if @curse_lifted<br />
    end<br />
    process_cursed_victory_execution<br />
  end<br />
<br />
  def process_cursed_victory_options<br />
    @cursed_spriteset = KursedVictory::Spriteset.new<br />
    @curse_stage = 0<br />
    @curse_index = 0<br />
    @cursed_options = true<br />
    while @cursed_options<br />
      Graphics.update<br />
      Input.update<br />
      update_cursed_victory<br />
    end<br />
  end<br />
<br />
  def update_cursed_victory<br />
    case @curse_stage<br />
    when 0<br />
      update_cursed_victory_options<br />
    when 1<br />
      update_cursed_victory_decision<br />
    end<br />
  end<br />
<br />
  def update_cursed_victory_options<br />
    if Input.trigger?(Input::UP) or Input.trigger?(Input::DOWN)<br />
      &#36;game_system.se_play(&#36;data_system.cursor_se)<br />
      @curse_index = (@curse_index + 1) % 2<br />
      @cursed_spriteset.move_cursor(@curse_index)<br />
      return<br />
    elsif Input.trigger?(Input::C)<br />
      &#36;game_system.se_play(&#36;data_system.decision_se)<br />
      name = @round2_data[:name]<br />
      if name<br />
        @curse_text = KursedVictory::OUTCOME[@curse_index]<br />
        @curse_text = sprintf(@curse_text, name)<br />
      end<br />
      @cursed_spriteset.dispose<br />
      if @curse_index == 1<br />
        Audio.bgs_stop<br />
        @cursed_message.dispose<br />
        @curse_lifted = true<br />
      end<br />
      if name<br />
        ow = 480<br />
        bitmap = Bitmap.new(ow - 32, 32)<br />
        bitmap.draw_text(0, 0, bitmap.width, 32, @curse_text, 1)<br />
        @outcome_window = Window_Base.new(80, 160, ow, 64)<br />
        @outcome_window.contents = bitmap<br />
        @outcome_window.pause = true<br />
        @curse_stage = 1<br />
      else<br />
        @cursed_options = @curse_stage = nil<br />
      end<br />
    end<br />
  end<br />
<br />
  def update_cursed_victory_decision<br />
    @outcome_window.update<br />
    if Input.trigger?(Input::C)<br />
      &#36;game_system.se_play(&#36;data_system.decision_se)<br />
      @outcome_window.dispose<br />
      @cursed_options = @curse_stage = nil<br />
    end<br />
  end<br />
<br />
  def process_cursed_victory_execution<br />
    @cursed_cursor = Arrow_Actor.new(nil)<br />
    @cursed_cursor.index = 0<br />
    @cursed_victory = true<br />
    while @cursed_victory<br />
      Graphics.update<br />
      Input.update<br />
      update_cursed_victory_execution<br />
    end<br />
    KursedVictory::WAIT_FRAMES.times { Graphics.update }<br />
    @cursed_message.dispose<br />
    @cursed_cursor.bitmap.dispose<br />
    @cursed_cursor.dispose<br />
    Audio.bgs_stop<br />
    @cursed_victory = true<br />
  end<br />
<br />
  def update_cursed_victory_execution<br />
    @cursed_cursor.update<br />
    if Input.trigger?(Input::C)<br />
      &#36;game_system.se_play(&#36;data_system.decision_se)<br />
      actor = &#36;game_party.actors[@cursed_cursor.index]<br />
      actor.add_state(1)<br />
      @status_window.refresh<br />
      @cursed_victory = nil<br />
    end<br />
  end<br />
<br />
  def process_defeat<br />
    &#36;game_system.bgm_play(&#36;game_temp.map_bgm)<br />
    battle_end(2)<br />
  end<br />
end</code></div></div><br />
<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: x-large;" class="mycode_size"><a href="https://www.mediafire.com/folder/s4vqc460gts3t/KursedVictory" target="_blank" rel="noopener" class="mycode_url">DOWNLOAD DEMO NOW!</a></span></span></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Terms &amp; Conditions</span><br />
<br />
Free as in <img src="https://www.save-point.org/images/smilies/ejlol/beer.gif" alt="Beer" title="Beer" class="smilie smilie_189" /> beer for non commercial games. <img src="https://www.save-point.org/images/smilies/ejlol/gamer.gif" alt="Gamer" title="Gamer" class="smilie smilie_183" /><br />
Include my nickname in your game credits.<br />
That's it! <img src="https://www.save-point.org/images/smilies/ejlol/tongue.gif" alt="Tongue sticking out" title="Tongue sticking out" class="smilie smilie_24" />]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">KursedVictory XP</span></span></div>
<br />
<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: medium;" class="mycode_size">by Kyonides</span></span></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Introduction</span><br />
<br />
You will either love this scriptlet or just hate it. <img src="https://www.save-point.org/images/smilies/ejlol/laughing.gif" alt="Laughing" title="Laughing" class="smilie smilie_23" /><br />
Sometimes the heroes cannot simply obtain a flawless victory. That would be inconceivable! <img src="https://www.save-point.org/images/smilies/ejlol/credible.gif" alt="Incredible" title="Incredible" class="smilie smilie_232" /> <br />
Thus, they need some final punishment to make sure they learn their lesson! <img src="https://www.save-point.org/images/smilies/ejlol/serious.gif" alt="Serious" title="Serious" class="smilie smilie_50" /> <br />
<br />
Just add enemy ID's to the <span style="font-weight: bold;" class="mycode_b">ENEMY_IDS</span> constant to make this happen! <img src="https://www.save-point.org/images/smilies/ejlol/wink.gif" alt="Winking" title="Winking" class="smilie smilie_33" /> <br />
<br />
<div class="tborder">
  			<div class="thead" style="padding:4px; margin:1px;"><input type="button" class="button" value="+" style="font-family:Monospace; padding:0px" onclick="if (this.parentNode.parentNode.getElementsByTagName('div')[1].style.display=='none'){ this.parentNode.parentNode.getElementsByTagName('div')[1].style.display='';this.value='-';} else {this.parentNode.parentNode.getElementsByTagName('div')[1].style.display='none';this.value='+';}"/> Screenshots</div>
  			<div class="trow2" style="display:none; padding:4px; margin:1px;">
<img src="https://i.postimg.cc/8Pn9ZYCD/kursedvictory-xp001.jpg" loading="lazy"  alt="[Image: kursedvictory-xp001.jpg]" class="mycode_img" /><br />
<img src="https://i.postimg.cc/4x7Mq1Kc/kursedvictory-xp002.jpg" loading="lazy"  alt="[Image: kursedvictory-xp002.jpg]" class="mycode_img" /><br />
<img src="https://i.postimg.cc/Y9rqbdjF/kursedvictory-xp003.jpg" loading="lazy"  alt="[Image: kursedvictory-xp003.jpg]" class="mycode_img" /><br />
<img src="https://i.postimg.cc/VkkFH7Y8/kursedvictory-xp004.jpg" loading="lazy"  alt="[Image: kursedvictory-xp004.jpg]" class="mycode_img" /><br />
<img src="https://i.postimg.cc/RZpTrcFn/kursedvictory-xp005.jpg" loading="lazy"  alt="[Image: kursedvictory-xp005.jpg]" class="mycode_img" /><br />
</div>
		</div>
<br />
<span style="font-weight: bold;" class="mycode_b">The Script</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># * KursedVictory XP * #<br />
#   Scripter : Kyonides<br />
#   v1.2.0 - 2025-09-09<br />
<br />
# Sometimes the heroes cannot simply obtain a flawless victory. Thus, they need<br />
# some final punishment to make sure they learn their lesson!<br />
<br />
# Just add enemy ID's to the ENEMY_IDS constant to make this happen!<br />
<br />
# Warning: If you refuse to comply, you might have to fight another troop...<br />
<br />
module KursedVictory<br />
  BGS = "Darkness"<br />
  CURSOR = "sword0132"<br />
  CURSOR_OY = 4<br />
  OPTION_BACKDROP = "box240"<br />
  MESSAGE = ["Flawless Victory!", "Now choose a curse victim!"]<br />
  OPTIONS = ["Comply", "Refuse"]<br />
  OUTCOME = ["You complied with the %s's demand.",<br />
             "You refused to listen to %s."]<br />
  CURSE_CHANCE = 100<br />
  WAIT_FRAMES = 40<br />
  ENEMY_IDS = [1]<br />
  ROUND2_ENEMY_IDS = {}<br />
  ROUND2_ENEMY_IDS[1] = { :name =&gt; "Basilisk", :troop_id =&gt; 3 }<br />
end<br />
<br />
class Game_Enemy<br />
  def curse_victory?<br />
    KursedVictory::ENEMY_IDS.include?(@enemy_id)<br />
  end<br />
end<br />
<br />
class Game_Party<br />
  def dead_members<br />
    @actors.select {|actor| actor.dead? }<br />
  end<br />
<br />
  def all_dead_now?<br />
    dead_members.size == @actors.size<br />
  end<br />
end<br />
<br />
class Game_Troop<br />
  def curse_flawless_victory?<br />
    enemy = @enemies.find {|enemy| enemy.curse_victory? }<br />
    enemy != nil<br />
  end<br />
end<br />
<br />
class CursedMessageWindow &lt; Window_Base<br />
  def initialize(wx, wy)<br />
    super(wx, wy, 280, 80)<br />
    self.contents = Bitmap.new(width - 32, height - 32)<br />
    refresh<br />
  end<br />
<br />
  def refresh<br />
    line1, line2 = KursedVictory::MESSAGE<br />
    font = self.contents.font<br />
    font.bold = true<br />
    font.color.set(220, 80, 0)<br />
    self.contents.draw_text(0, 0, width - 32, 24, line1, 1)<br />
    font.bold = false<br />
    font.color.set(255, 255, 255)<br />
    self.contents.draw_text(0, 24, width - 32, 24, line2, 1)<br />
  end<br />
end<br />
<br />
module KursedVictory<br />
  class TextBox<br />
    def initialize(pos, total, vp=nil)<br />
      @index = pos<br />
      @max = total<br />
      @row_max = 2<br />
      @col_max = 1<br />
      @viewport = vp<br />
      @backdrop = Sprite.new(vp)<br />
      @label = Sprite.new(vp)<br />
      @label.z = 50<br />
    end<br />
<br />
    def set_image(filename)<br />
      @filename = filename<br />
      set_bitmap<br />
      set_text_bitmap<br />
      reset_alignment<br />
    end<br />
<br />
    def set_bitmap<br />
      bitmap = RPG::Cache.picture(@filename)<br />
      @width = bitmap.width<br />
      @height = bitmap.height<br />
      @rect = bitmap.rect<br />
      @col_width = 640<br />
      @center_x = (@col_width - @width) / 2<br />
      @backdrop.bitmap = bitmap<br />
    end<br />
<br />
    def set_text_bitmap<br />
      @align_x = 1<br />
      @label.bitmap = Bitmap.new(@width, @height)<br />
    end<br />
<br />
    def set_align_xy<br />
      h = @height + 24<br />
      @backdrop.x = @center_x<br />
      @backdrop.y = 140 + @index * h<br />
    end<br />
<br />
    def reset_alignment<br />
      set_align_xy<br />
      @label.x = @backdrop.x<br />
      @label.y = @backdrop.y<br />
    end<br />
<br />
    def x<br />
      @backdrop.x<br />
    end<br />
<br />
    def y<br />
      @backdrop.y<br />
    end<br />
<br />
    def set_text(text)<br />
      @text = text<br />
      bit = @label.bitmap<br />
      bit.clear<br />
      bit.draw_text(@rect, text, @align_x)<br />
    end<br />
<br />
    def dispose<br />
      @label.bitmap.dispose<br />
      @label.dispose<br />
      @backdrop.bitmap.dispose<br />
      @backdrop.dispose<br />
    end<br />
    attr_reader :text<br />
  end<br />
<br />
  class Spriteset<br />
    def initialize<br />
      @curse_viewport = Viewport.new(0, 0, 640, 480)<br />
      @curse_viewport.z = 500<br />
      @curse_boxes = []<br />
      @curse_x = []<br />
      @curse_y = []<br />
      filename = KursedVictory::OPTION_BACKDROP<br />
      options = KursedVictory::OPTIONS<br />
      options.each_with_index do |choice, n|<br />
        box = KursedVictory::TextBox.new(n, options.size, @curse_viewport)<br />
        box.set_image(filename)<br />
        box.set_text(choice)<br />
        @curse_x &lt;&lt; box.x<br />
        @curse_y &lt;&lt; box.y + KursedVictory::CURSOR_OY<br />
        @curse_boxes &lt;&lt; box<br />
      end<br />
      @cursed_cursor = Sprite.new(@curse_viewport)<br />
      @cursed_cursor.x = @curse_x[0]<br />
      @cursed_cursor.y = @curse_y[0]<br />
      @cursed_cursor.bitmap = RPG::Cache.icon(KursedVictory::CURSOR)<br />
    end<br />
<br />
    def move_cursor(index)<br />
      @cursed_cursor.y = @curse_y[index]<br />
    end<br />
<br />
    def dispose<br />
      @curse_boxes.each {|box| box.dispose }<br />
      @cursed_cursor.bitmap.dispose<br />
      @cursed_cursor.dispose<br />
      @curse_viewport.dispose<br />
    end<br />
  end<br />
end<br />
<br />
class Scene_Battle<br />
  alias :kyon_kurvic_scn_btl_st_ph5 :start_phase5<br />
  alias :kyon_kurvic_scn_btl_up_ph5 :update_phase5<br />
  def start_phase5<br />
    process_cursed_victory<br />
    if @cursed_victory and &#36;game_party.all_dead_now?<br />
      process_defeat<br />
      return<br />
    end<br />
    kyon_kurvic_scn_btl_st_ph5<br />
  end<br />
<br />
  def update_phase5<br />
    if @curse_lifted and Input.trigger?(Input::C)<br />
      start_anti_curse_battle<br />
      return<br />
    end<br />
    kyon_kurvic_scn_btl_up_ph5<br />
  end<br />
<br />
  def start_anti_curse_battle<br />
    Audio.bgm_stop<br />
    Audio.bgs_stop<br />
    &#36;game_party.clear_actions<br />
    &#36;game_troop.enemies.clear<br />
    &#36;game_temp.battle_troop_id = @round2_data[:troop_id]<br />
    &#36;game_system.se_play(&#36;data_system.battle_start_se)<br />
    &#36;game_system.bgm_play(&#36;game_system.battle_bgm)<br />
    &#36;scene = Scene_Battle.new<br />
  end<br />
<br />
  def process_cursed_victory<br />
    return if KursedVictory::CURSE_CHANCE &lt; rand(100)<br />
    return unless &#36;game_troop.curse_flawless_victory?<br />
    return if &#36;game_party.dead_members.size &gt; 0<br />
    Audio.bgm_stop<br />
    @bgs = RPG::AudioFile.new(KursedVictory::BGS)<br />
    &#36;game_system.bgs_play(@bgs)<br />
    wx = (Graphics.width - 280) / 2<br />
    @cursed_message = CursedMessageWindow.new(wx, 32)<br />
    @round2_data = KursedVictory::ROUND2_ENEMY_IDS[@troop_id]<br />
    if @round2_data<br />
      process_cursed_victory_options<br />
      return if @curse_lifted<br />
    end<br />
    process_cursed_victory_execution<br />
  end<br />
<br />
  def process_cursed_victory_options<br />
    @cursed_spriteset = KursedVictory::Spriteset.new<br />
    @curse_stage = 0<br />
    @curse_index = 0<br />
    @cursed_options = true<br />
    while @cursed_options<br />
      Graphics.update<br />
      Input.update<br />
      update_cursed_victory<br />
    end<br />
  end<br />
<br />
  def update_cursed_victory<br />
    case @curse_stage<br />
    when 0<br />
      update_cursed_victory_options<br />
    when 1<br />
      update_cursed_victory_decision<br />
    end<br />
  end<br />
<br />
  def update_cursed_victory_options<br />
    if Input.trigger?(Input::UP) or Input.trigger?(Input::DOWN)<br />
      &#36;game_system.se_play(&#36;data_system.cursor_se)<br />
      @curse_index = (@curse_index + 1) % 2<br />
      @cursed_spriteset.move_cursor(@curse_index)<br />
      return<br />
    elsif Input.trigger?(Input::C)<br />
      &#36;game_system.se_play(&#36;data_system.decision_se)<br />
      name = @round2_data[:name]<br />
      if name<br />
        @curse_text = KursedVictory::OUTCOME[@curse_index]<br />
        @curse_text = sprintf(@curse_text, name)<br />
      end<br />
      @cursed_spriteset.dispose<br />
      if @curse_index == 1<br />
        Audio.bgs_stop<br />
        @cursed_message.dispose<br />
        @curse_lifted = true<br />
      end<br />
      if name<br />
        ow = 480<br />
        bitmap = Bitmap.new(ow - 32, 32)<br />
        bitmap.draw_text(0, 0, bitmap.width, 32, @curse_text, 1)<br />
        @outcome_window = Window_Base.new(80, 160, ow, 64)<br />
        @outcome_window.contents = bitmap<br />
        @outcome_window.pause = true<br />
        @curse_stage = 1<br />
      else<br />
        @cursed_options = @curse_stage = nil<br />
      end<br />
    end<br />
  end<br />
<br />
  def update_cursed_victory_decision<br />
    @outcome_window.update<br />
    if Input.trigger?(Input::C)<br />
      &#36;game_system.se_play(&#36;data_system.decision_se)<br />
      @outcome_window.dispose<br />
      @cursed_options = @curse_stage = nil<br />
    end<br />
  end<br />
<br />
  def process_cursed_victory_execution<br />
    @cursed_cursor = Arrow_Actor.new(nil)<br />
    @cursed_cursor.index = 0<br />
    @cursed_victory = true<br />
    while @cursed_victory<br />
      Graphics.update<br />
      Input.update<br />
      update_cursed_victory_execution<br />
    end<br />
    KursedVictory::WAIT_FRAMES.times { Graphics.update }<br />
    @cursed_message.dispose<br />
    @cursed_cursor.bitmap.dispose<br />
    @cursed_cursor.dispose<br />
    Audio.bgs_stop<br />
    @cursed_victory = true<br />
  end<br />
<br />
  def update_cursed_victory_execution<br />
    @cursed_cursor.update<br />
    if Input.trigger?(Input::C)<br />
      &#36;game_system.se_play(&#36;data_system.decision_se)<br />
      actor = &#36;game_party.actors[@cursed_cursor.index]<br />
      actor.add_state(1)<br />
      @status_window.refresh<br />
      @cursed_victory = nil<br />
    end<br />
  end<br />
<br />
  def process_defeat<br />
    &#36;game_system.bgm_play(&#36;game_temp.map_bgm)<br />
    battle_end(2)<br />
  end<br />
end</code></div></div><br />
<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="font-size: x-large;" class="mycode_size"><a href="https://www.mediafire.com/folder/s4vqc460gts3t/KursedVictory" target="_blank" rel="noopener" class="mycode_url">DOWNLOAD DEMO NOW!</a></span></span></div>
<br />
<span style="font-weight: bold;" class="mycode_b">Terms &amp; Conditions</span><br />
<br />
Free as in <img src="https://www.save-point.org/images/smilies/ejlol/beer.gif" alt="Beer" title="Beer" class="smilie smilie_189" /> beer for non commercial games. <img src="https://www.save-point.org/images/smilies/ejlol/gamer.gif" alt="Gamer" title="Gamer" class="smilie smilie_183" /><br />
Include my nickname in your game credits.<br />
That's it! <img src="https://www.save-point.org/images/smilies/ejlol/tongue.gif" alt="Tongue sticking out" title="Tongue sticking out" class="smilie smilie_24" />]]></content:encoded>
		</item>
	</channel>
</rss>