Manual Surprise Rates
Version: 1.0.0
Author: modern algebra
Date: 29 December 2012
Version History
- <Version 1.0.0> 2012.12.29 - Original Release
Description
This script allows you to manually set the pre-emptive attack and surprise attack rates. It can be especially useful for story battles where you want the party or the enemy to have the upper hand in line with the story event.
Features
- Great for story battles where performing some action beforehand should give the party a surprise attack
- Can create usable items which dramatically increase the rate at which the party gets preemptive strikes
- Option to reset rates after any battle
Instructions
Paste the script into its own slot in the Script Editor, above Main but below Materials.
See the header of the script for instructions on use and configuration.
Script
#==============================================================================
# Manual Surprise Rates
# Version: 1.0.0
# Author: modern algebra (rmrk.net)
# Date: 29 December 2012
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Description:
#
# This script allows you to manually set the pre-emptive attack and surprise
# attack rates. It can be especially useful for story battles where you want
# the party or the enemy to have the upper hand in line with the story event.
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Instructions:
#
# Paste this script into its own slot in the Script Editor, above Main but
# below Materials.
#
# To set the preemptive and surprise rates manually, all you need to do is
# use either of the following codes in a Script event command:
#
# $game_party.manual_preemptive_rate = x
# $game_party.manual_surprise_rate = x
#
# where x is the percentage you seek. It can be a float between 0.01 (1%) and
# 1.0 (100%). You can also use integer percentile between 2 (2%) and 100
# (100%).
#
# When you set the rate manually, then it overrides any effects from the
# "Cancel Surprise" and "Raise Preemptive" features. As such, they will be
# ineffective and they do not interact with the rate that is manually set.
#
# Finally, you can also set it so that the manual rates apply only for one,
# battle, after which they are reset and the calculation returns to normal.
# For more details, see the Editable Region beginning at line 41.
#==============================================================================
$imported = {} unless $imported
$imported[:MA_ManualSurpriseRates] = true
#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
# BEGIN Editable Region
#||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# MAMSR_RESET_RATES_AFTER_BATTLE
# If this option is true, then the manual surprise and preemptive rates that
# you have set will be reset after a battle, meaning that they will only
# apply to the first battle after they are set. If set to false, the rate
# will remain what it is until manually set to something else. You can also
# set this value to an integer, in which case its value will be dependent on
# the value of the switch with that ID. For example, if you set it to 4, then
# the rates will be reset after battle when Switch 4 is ON, and will not be
# reset when Switch 4 is OFF.
MAMSR_RESET_RATES_AFTER_BATTLE = false
#||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# END Editable Region
#//////////////////////////////////////////////////////////////////////////////
#==============================================================================
# *** Battle Manager
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# aliased method - self.setup
#==============================================================================
module BattleManager
class << self
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Initialize Members
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias mamsr_setp_2hn5 setup
def setup(*args)
mamsr_setp_2hn5(*args) # Call Original Method
# Calculate here since manual settings should apply to evented battles too
@preemptive = (rand < rate_preemptive) if $game_party.manual_preemptive_rate
@surprise = (rand < rate_surprise && !@preemptive) if $game_party.manual_surprise_rate
end
end
end
#==============================================================================
# ** Game_Party
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# new attr_accessors - manual_preemptive_rate; manual_surprise_rate
# aliased methods - rate_preemptive; rate_surprise; on_battle_end
# new method - mamsr_reset_surprise_rates
#==============================================================================
class Game_Party
[:preemptive, :surprise].each { |type|
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Public Instance Variables
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
attr_accessor :"manual_#{type}_rate"
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Calculate Probability of Surprise
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias_method(:"mamsr_#{type}rate_2rm6", :"rate_#{type}")
define_method(:"rate_#{type}") do |*args|
rate = instance_variable_get(:"@manual_#{type}_rate")
return (rate.is_a?(Float) || rate < 1) ? [[0, rate].max, 1.0].min : rate / 100.0 if rate
send(:"mamsr_#{type}rate_2rm6", *args)
end
}
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Processing at End of Battle
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# if on_battle_end already defined in Game_Party, then alias
if instance_methods(false).include?(:on_battle_end)
alias mamsr_onbatlend_6hc2 on_battle_end
def on_battle_end(*args)
mamsr_reset_surprise_rates
mamsr_onbatlend_6hc2(*args) # Call Original Method
end
else # if on_battle_end not yet defined in Game_Party, call super
def on_battle_end(*args)
mamsr_reset_surprise_rates
super(*args) # Call Super Method
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Reset Surprise Rates
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def mamsr_reset_surprise_rates
resetter = MAMSR_RESET_RATES_AFTER_BATTLE
if (resetter.is_a?(Integer) ? $game_switches[resetter] : resetter)
@manual_preemptive_rate = nil
@manual_surprise_rate = nil
end
end
end
Credit
Thanks
- PhoenixKingAnsem, for the request
Support
Please post in this topic at RMRK.net if you have any questions, suggestions, error reports, or comments about this script. It is perfectly fine to post here even if this topic has not been posted in for a very long time.
Please do not message me privately, as any concerns you have are likely shared by others and they will benefit from our correspondence being public. Additionally, I am occasionally absent, and posting publically will allow other members to assist you when I am unable to do so quickly.
Known Compatibility Issues
I am currently unaware of any compatibility issues.
Demo
I don't think a demo is required, but if you are having trouble using this script and need a demo, then let me know.
Terms of Use
I adopt RMRK's default
Terms of Use.