#==============================================================================
#
# ▼ Yanfly Engine Ace - TP Manager v1.02
# -- Last Updated: 2011.12.10
# -- Level: Hard
# -- Requires: n/a
#
#==============================================================================
$imported = {} if $imported.nil?
$imported["YEA-TPManager"] = true
#==============================================================================
# ▼ Updates
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 2011.12.10 - Added <tp cost: x> notetag.
# 2011.12.06 - Fixed an error in one of the formulas.
# 2011.12.05 - Started Script and Finished.
#
#==============================================================================
# ▼ Introduction
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# The TP system in RPG Maker VX Ace is actually rather limiting. A lot of the
# system is hardcoded in giving Ace users very little control over how much TP
# gain a battler can receive from particular actions and situations. This
# script gives you the ability to adjust how much TP actors will acquire from
# various actions, different TP modes, and letting players select and pick what
# TP mode they want for each actor (akin to Final Fantasy X).
#
#==============================================================================
# ▼ Instructions
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# To install this script, open up your script editor and copy/paste this script
# to an open slot below ▼ Materials/素材 but above ▼ Main. Remember to save.
#
# -----------------------------------------------------------------------------
# Actor Notetags - These notetags go in the actors notebox in the database.
# -----------------------------------------------------------------------------
# <tp mode: x>
# This sets the actor's default TP mode to x. If this tag isn't used, the
# default TP mode will be set to whatever the module uses as default.
#
# <unlock tp: x>
# <unlock tp: x, x>
# This unlocks what TP modes the actor can use by default. If this tag isn't
# used, the default unlocked TP modes will be whatever the module uses.
#
# -----------------------------------------------------------------------------
# Item Notetags - These notetags go in the item notebox in the database.
# -----------------------------------------------------------------------------
# <unlock tp: x>
# <unlock tp: x, x>
# When this item is used upon an actor, that actor will learn TP Mode(s) x,
# making it available to change in the TP Menu.
#
# -----------------------------------------------------------------------------
# Skill Notetags - These notetags go in the skill notebox in the database.
# -----------------------------------------------------------------------------
# <unlock tp: x>
# <unlock tp: x, x>
# When this skill targets an actor, that actor will learn TP Mode(s) x thus,
# making it available to change in the TP Menu.
#
# <learn unlock tp: x>
# <learn unlock tp: x, x>
# When an actor learns a skill with this notetag, that actor will learn
# TP Mode(s) x making it available to change in the TP Menu.
#
# <tp cost: x>
# When this notetag appears in a skill's notebox, the TP cost for that skill
# becomes x. This notetag allows TP costs to surpass 100 TP, which is the max
# TP cost in the RPG Maker VX Ace database editor.
#
# -----------------------------------------------------------------------------
# Enemy Notetags - These notetags go in the enemy notebox in the database.
# -----------------------------------------------------------------------------
# <tp mode: x>
# This sets the enemy's default TP mode to x. If this tag isn't used, the
# default TP mode will be set to whatever the module uses as default.
#
# -----------------------------------------------------------------------------
# Script Calls - These commands are used with script calls.
# -----------------------------------------------------------------------------
# change_tp_mode(x, y)
# Replace x with the ID of the actor you want to change to the TP Mode y. This
# will also unlock the TP mode for the actor, and make it available under the
# skill menu for changing.
#
# unlock_tp_mode(x, y)
# Replace x with the ID of the actor you want to learn for the TP Mode y. This
# will cause the actor to learn the TP mode and have it accessible in the skill
# menu for changing.
#
# remove_tp_mode(x, y)
# Replace x with the ID of the actor you want to remove the TP Mode y. This
# will cause the actor to forget the TP mode and no longer have it accessible
# through the skill menu for changing.
#
# unlock_all_tp_modes(x)
# Replace x with the ID of the actor you want to unlock all TP modes for. This
# will make all the TP modes available to the actor from the skill menu.
#
# remove_all_tp_modes(x)
# Removes all TP modes for actor x except for the actor's default TP mode.
# This removes all TP modes from being available in the actor's skill menu.
#
#==============================================================================
# ▼ Compatibility
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# This script is made strictly for RPG Maker VX Ace. It is highly unlikely that
# it will run with RPG Maker VX without adjusting.
#
#==============================================================================
module YEA
module TP_MANAGER
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# - General TP Settings -
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# Here, you can adjust global settings for TP including the maximum TP,
# whether or not you want the player to change TP modes, and more.
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
TP_LIMIT = 100 # Sets the maximum TP. Default: 100
DEFAULT_TP_MODE = 0 # This is the TP mode everybody starts with
# unless changed through notetags.
DEFAULT_UNLOCKS = [0, 1, 2, 3,4,5,6,7,8,9,10,11,12,13,14,15,]
# These modes are unlocked for all actors
# unless changed through notetags.
LOW_HP = 0.25 # Percent for what is considered low HP.
LOW_MP = 0.25 # Percent for what is considered low MP.
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# - TP Mode Change Settings -
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# Adjust the settings here for TP Mode Menu related items. Also, be sure
# to bind the TP_MODE_SWITCH to a switch ID. If that switch is on, the
# TP Mode item will appear in the skill menu. If off, it won't appear.
# If you set it to 0, then TP mode will always be enabled.
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
MENU_NAME = "性格" # The displayed name for the TP Menu.
TP_MODE_SWITCH = 0 # Switch ID used for enabling TP Mode menu.
DEFAULT_ENABLE = true # Enable switch by default?
CHANGE_TP_RESET = true # Reset TP to 0 whenever a mode is changed?
EQUIPPED_COLOUR = 17 # Window text colour used for equipped TP mode.
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# - TP Modes -
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# TP modes have a number of things that can change the way actors gain TP.
# Adjust the settings below to change how much gain and loss incurs per
# each of the different actions.
#
# Setting Description
# -------------------------------------------------------------------------
# - :name - Name that appears in the TP Mode menu.
# - :icon - Icon used for the TP Mode menu.
# - :description - Help window description. Use \n for line breaks.
# - :preserve_tp - Carry over TP from last battle to next battle?
# - :init_tp - TP at the start of each battle if no TP preservation.
# - :regen_tp - TP regenerated each turn. Uses a formula.
# - :take_hp_dmg - TP charged by receiving HP damage. Uses a formula.
# - :deal_hp_dmg - TP gained by dealing HP damage. Uses a formula.
# - :heal_hp_dmg - TP gained through healing HP damage. Uses a formula.
# - :ally_hp_dmg - TP gained when allies take HP damage. Uses a formula.
# - :take_mp_dmg - TP charged by receiving MP damage. Uses a formula.
# - :deal_mp_dmg - TP gained by dealing MP damage. Uses a formula.
# - :heal_mp_dmg - TP gained through healing MP damage. Uses a formula.
# - :ally_mp_dmg - TP gained when allies take MP damage. Uses a formula.
# - :deal_state - TP gained when user inflicts a state to a foe. Formula.
# - :gain_state - TP gained when user gains a state from a foe. Formula.
# - :kill_ally - TP gained when an ally is killed. Uses a formula.
# - :kill_enemy - TP gained when killing an enemy. Uses a formula.
# - :win_battle - TP gained whenever a battle is won. Uses a formula.
# - :flee_battle - TP gained whenever party escapes. Uses a formula.
# - :lose_battle - TP gained whenever a battle is lost. Uses a formula.
# - :low_hp_turn - TP gained at the end of a turn with user at low HP.
# - :low_mp_turn - TP gained at the end of a turn with user at low MP.
# - :only_ally - TP gained when user is only ally alive.
# - :evasion - TP gained when user evades an attack.
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
TP_MODES ={
# TP Mode => { Settings }
# -------------------------------------------------------------------------
0 => { # This is the default mode.
# :setting => Adjust settings as you see fit.
:name => "苦行僧",
:icon => 121,
:description => "在等待或者受到攻击时增加TP.",
:preserve_tp => false,
:init_tp => "rand * 25",
:regen_tp => "100 * trg",
:take_hp_dmg => "50 * damage_rate * tcr",
:deal_hp_dmg => "0",
:heal_hp_dmg => "0",
:ally_hp_dmg => "0",
:take_mp_dmg => "0",
:deal_mp_dmg => "0",
:heal_mp_dmg => "0",
:ally_mp_dmg => "0",
:deal_state => "0",
:gain_state => "0",
:kill_ally => "0",
:kill_enemy => "0",
:win_battle => "0",
:flee_battle => "0",
:lose_battle => "0",
:low_hp_turn => "0",
:low_mp_turn => "0",
:only_alive => "0",
:evasion => "0",
}, # Do not remove this.
# -------------------------------------------------------------------------
1 => { # New TP mode!
# :setting => Adjust settings as you see fit.
:name => "难友",
:icon => 122,
:description => "每当同伴受伤都增加TP.",
:preserve_tp => true,
:init_tp => "0",
:regen_tp => "0",
:take_hp_dmg => "0",
:deal_hp_dmg => "0",
:heal_hp_dmg => "0",
:ally_hp_dmg => "20 * tcr",
:take_mp_dmg => "0",
:deal_mp_dmg => "0",
:heal_mp_dmg => "0",
:ally_mp_dmg => "0",
:deal_state => "0",
:gain_state => "0",
:kill_ally => "0",
:kill_enemy => "0",
:win_battle => "0",
:flee_battle => "0",
:lose_battle => "0",
:low_hp_turn => "0",
:low_mp_turn => "0",
:only_alive => "0",
:evasion => "0",
}, # Do not remove this.
# -------------------------------------------------------------------------
2 => { # New TP mode!
# :setting => Adjust settings as you see fit.
:name => "勇者",
:icon => 116,
:description => "进攻和治疗时增加TP.",
:preserve_tp => true,
:init_tp => "0",
:regen_tp => "0",
:take_hp_dmg => "0",
:deal_hp_dmg => "[@result.hp_damage * 100 / mhp, 16].min * tcr",
:heal_hp_dmg => "0",
:ally_hp_dmg => "0",
:take_mp_dmg => "0",
:deal_mp_dmg => "0",
:heal_mp_dmg => "0",
:ally_mp_dmg => "0",
:deal_state => "0",
:gain_state => "0",
:kill_ally => "0",
:kill_enemy => "0",
:win_battle => "0",
:flee_battle => "0",
:lose_battle => "0",
:low_hp_turn => "0",
:low_mp_turn => "0",
:only_alive => "0",
:evasion => "0",
}, # Do not remove this.
# -------------------------------------------------------------------------
3 => { # New TP mode!
# :setting => Adjust settings as you see fit.
:name => "守护者",
:icon => 112,
:description => "治疗时增加TP.",
:preserve_tp => true,
:init_tp => "0",
:regen_tp => "0",
:take_hp_dmg => "0",
:deal_hp_dmg => "0",
:heal_hp_dmg => "[@result.hp_damage * -100 / mhp, 16].min * tcr",
:ally_hp_dmg => "0",
:take_mp_dmg => "0",
:deal_mp_dmg => "0",
:heal_mp_dmg => "0",
:ally_mp_dmg => "0",
:deal_state => "0",
:gain_state => "0",
:kill_ally => "0",
:kill_enemy => "0",
:win_battle => "0",
:flee_battle => "0",
:lose_battle => "0",
:low_hp_turn => "0",
:low_mp_turn => "0",
:only_alive => "0",
:evasion => "0",
}, # Do not remove this.
# -------------------------------------------------------------------------
4 => { # New TP mode!
# :setting => Adjust settings as you see fit.
:name => "中断者",
:icon => 215,
:description => "恢复MP损害受到MP损伤或者同伴受到损伤时提高TP.",
:preserve_tp => true,
:init_tp => "0",
:regen_tp => "0",
:take_hp_dmg => "0",
:deal_hp_dmg => "0",
:heal_hp_dmg => "0",
:ally_hp_dmg => "0",
:take_mp_dmg => "50 * damage_rate * tcr",
:deal_mp_dmg => "[@result.mp_damage / 4, 16].min * tcr",
:heal_mp_dmg => "0",
:ally_mp_dmg => "20 * tcr",
:deal_state => "0",
:gain_state => "0",
:kill_ally => "0",
:kill_enemy => "0",
:win_battle => "0",
:flee_battle => "0",
:lose_battle => "0",
:low_hp_turn => "0",
:low_mp_turn => "0",
:only_alive => "0",
:evasion => "0",
}, # Do not remove this.
# -------------------------------------------------------------------------
5 => { # New TP mode!
# :setting => Adjust settings as you see fit.
:name => "炼金术士",
:icon => 193,
:description => "恢复同伴MP时增加TP.",
:preserve_tp => true,
:init_tp => "0",
:regen_tp => "0",
:take_hp_dmg => "0",
:deal_hp_dmg => "0",
:heal_hp_dmg => "0",
:ally_hp_dmg => "0",
:take_mp_dmg => "0",
:deal_mp_dmg => "0",
:heal_mp_dmg => "[@result.mp_damage / -4, 16].min * tcr",
:ally_mp_dmg => "0",
:deal_state => "0",
:gain_state => "0",
:kill_ally => "0",
:kill_enemy => "0",
:win_battle => "0",
:flee_battle => "0",
:lose_battle => "0",
:low_hp_turn => "0",
:low_mp_turn => "0",
:only_alive => "0",
:evasion => "0",
}, # Do not remove this.
# -------------------------------------------------------------------------
6 => { # New TP mode!
# :setting => Adjust settings as you see fit.
:name => "杀手",
:icon => 115,
:description => "当同伴死亡时增加TP.",
:preserve_tp => true,
:init_tp => "0",
:regen_tp => "0",
:take_hp_dmg => "0",
:deal_hp_dmg => "0",
:heal_hp_dmg => "0",
:ally_hp_dmg => "0",
:take_mp_dmg => "0",
:deal_mp_dmg => "0",
:heal_mp_dmg => "0",
:ally_mp_dmg => "0",
:deal_state => "0",
:gain_state => "0",
:kill_ally => "0",
:kill_enemy => "25 * tcr",
:win_battle => "0",
:flee_battle => "0",
:lose_battle => "0",
:low_hp_turn => "0",
:low_mp_turn => "0",
:only_alive => "0",
:evasion => "0",
}, # Do not remove this.
# -------------------------------------------------------------------------
7 => { # New TP mode!
# :setting => Adjust settings as you see fit.
:name => "复仇者",
:icon => 1,
:description => "当同伴死亡时增加TP.",
:preserve_tp => true,
:init_tp => "0",
:regen_tp => "0",
:take_hp_dmg => "0",
:deal_hp_dmg => "0",
:heal_hp_dmg => "0",
:ally_hp_dmg => "0",
:take_mp_dmg => "0",
:deal_mp_dmg => "0",
:heal_mp_dmg => "0",
:ally_mp_dmg => "0",
:deal_state => "0",
:gain_state => "0",
:kill_ally => "50 * tcr",
:kill_enemy => "0",
:win_battle => "0",
:flee_battle => "0",
:lose_battle => "0",
:low_hp_turn => "0",
:low_mp_turn => "0",
:only_alive => "0",
:evasion => "0",
}, # Do not remove this.
# -------------------------------------------------------------------------
8 => { # New TP mode!
# :setting => Adjust settings as you see fit.
:name => "胜利者",
:icon => 113,
:description => "不管是否战斗都增加TP.",
:preserve_tp => true,
:init_tp => "0",
:regen_tp => "0",
:take_hp_dmg => "0",
:deal_hp_dmg => "0",
:heal_hp_dmg => "0",
:ally_hp_dmg => "0",
:take_mp_dmg => "0",
:deal_mp_dmg => "0",
:heal_mp_dmg => "0",
:ally_mp_dmg => "0",
:deal_state => "0",
:gain_state => "0",
:kill_ally => "0",
:kill_enemy => "0",
:win_battle => "20 * tcr",
:flee_battle => "0",
:lose_battle => "0",
:low_hp_turn => "0",
:low_mp_turn => "0",
:only_alive => "0",
:evasion => "0",
}, # Do not remove this.
# -------------------------------------------------------------------------
9 => { # New TP mode!
# :setting => Adjust settings as you see fit.
:name => "胆小鬼",
:icon => 114,
:description => "不管是否逃跑都增加TP.",
:preserve_tp => true,
:init_tp => "0",
:regen_tp => "0",
:take_hp_dmg => "0",
:deal_hp_dmg => "0",
:heal_hp_dmg => "0",
:ally_hp_dmg => "0",
:take_mp_dmg => "0",
:deal_mp_dmg => "0",
:heal_mp_dmg => "0",
:ally_mp_dmg => "0",
:deal_state => "0",
:gain_state => "0",
:kill_ally => "0",
:kill_enemy => "0",
:win_battle => "0",
:flee_battle => "0",
:lose_battle => "20 * tcr",
:low_hp_turn => "0",
:low_mp_turn => "0",
:only_alive => "0",
:evasion => "0",
}, # Do not remove this.
# -------------------------------------------------------------------------
10 => { # New TP mode!
# :setting => Adjust settings as you see fit.
:name => "狂人",
:icon => 48,
:description => "不管战斗结束后多少TP都增加.",
:preserve_tp => true,
:init_tp => "0",
:regen_tp => "0",
:take_hp_dmg => "0",
:deal_hp_dmg => "0",
:heal_hp_dmg => "0",
:ally_hp_dmg => "0",
:take_mp_dmg => "0",
:deal_mp_dmg => "0",
:heal_mp_dmg => "0",
:ally_mp_dmg => "0",
:deal_state => "0",
:gain_state => "0",
:kill_ally => "0",
:kill_enemy => "0",
:win_battle => "0",
:flee_battle => "0",
:lose_battle => "0",
:low_hp_turn => "16 * tcr",
:low_mp_turn => "0",
:only_alive => "0",
:evasion => "0",
}, # Do not remove this.
# -------------------------------------------------------------------------
11 => { # New TP mode!
# :setting => Adjust settings as you see fit.
:name => "调剂师",
:icon => 49,
:description => "不管战斗结束后多少MP都增加TP.",
:preserve_tp => true,
:init_tp => "0",
:regen_tp => "0",
:take_hp_dmg => "0",
:deal_hp_dmg => "0",
:heal_hp_dmg => "0",
:ally_hp_dmg => "0",
:take_mp_dmg => "0",
:deal_mp_dmg => "0",
:heal_mp_dmg => "0",
:ally_mp_dmg => "0",
:deal_state => "0",
:gain_state => "0",
:kill_ally => "0",
:kill_enemy => "0",
:win_battle => "0",
:flee_battle => "0",
:lose_battle => "0",
:low_hp_turn => "0",
:low_mp_turn => "16 * tcr",
:only_alive => "0",
:evasion => "0",
}, # Do not remove this.
# -------------------------------------------------------------------------
12 => { # New TP mode!
# :setting => Adjust settings as you see fit.
:name => "战略家",
:icon => 10,
:description => "每当使敌人状态受到攻击提高TP.",
:preserve_tp => true,
:init_tp => "0",
:regen_tp => "0",
:take_hp_dmg => "0",
:deal_hp_dmg => "0",
:heal_hp_dmg => "0",
:ally_hp_dmg => "0",
:take_mp_dmg => "0",
:deal_mp_dmg => "0",
:heal_mp_dmg => "0",
:ally_mp_dmg => "0",
:deal_state => "16 * tcr",
:gain_state => "0",
:kill_ally => "0",
:kill_enemy => "0",
:win_battle => "0",
:flee_battle => "0",
:lose_battle => "0",
:low_hp_turn => "0",
:low_mp_turn => "0",
:only_alive => "0",
:evasion => "0",
}, # Do not remove this.
# -------------------------------------------------------------------------
13 => { # New TP mode!
# :setting => Adjust settings as you see fit.
:name => "病人",
:icon => 3,
:description => "每当状态受到攻击提高TP.",
:preserve_tp => true,
:init_tp => "0",
:regen_tp => "0",
:take_hp_dmg => "0",
:deal_hp_dmg => "0",
:heal_hp_dmg => "0",
:ally_hp_dmg => "0",
:take_mp_dmg => "0",
:deal_mp_dmg => "0",
:heal_mp_dmg => "0",
:ally_mp_dmg => "0",
:deal_state => "0",
:gain_state => "16 * tcr",
:kill_ally => "0",
:kill_enemy => "0",
:win_battle => "0",
:flee_battle => "0",
:lose_battle => "0",
:low_hp_turn => "0",
:low_mp_turn => "0",
:only_alive => "0",
:evasion => "0",
}, # Do not remove this.
# -------------------------------------------------------------------------
14 => { # New TP mode!
# :setting => Adjust settings as you see fit.
:name => "舞者",
:icon => 12,
:description => "每当成功地逃避攻击提高TP.",
:preserve_tp => true,
:init_tp => "0",
:regen_tp => "0",
:take_hp_dmg => "0",
:deal_hp_dmg => "0",
:heal_hp_dmg => "0",
:ally_hp_dmg => "0",
:take_mp_dmg => "0",
:deal_mp_dmg => "0",
:heal_mp_dmg => "0",
:ally_mp_dmg => "0",
:deal_state => "0",
:gain_state => "0",
:kill_ally => "0",
:kill_enemy => "0",
:win_battle => "0",
:flee_battle => "0",
:lose_battle => "0",
:low_hp_turn => "0",
:low_mp_turn => "0",
:only_alive => "0",
:evasion => "16 * tcr",
}, # Do not remove this.
# -------------------------------------------------------------------------
15 => { # New TP mode!
# :setting => Adjust settings as you see fit.
:name => "独行侠",
:icon => 14,
:description => "当只剩最后一人时增加TP.",
:preserve_tp => true,
:init_tp => "0",
:regen_tp => "0",
:take_hp_dmg => "0",
:deal_hp_dmg => "0",
:heal_hp_dmg => "0",
:ally_hp_dmg => "0",
:take_mp_dmg => "0",
:deal_mp_dmg => "0",
:heal_mp_dmg => "0",
:ally_mp_dmg => "0",
:deal_state => "0",
:gain_state => "0",
:kill_ally => "0",
:kill_enemy => "0",
:win_battle => "0",
:flee_battle => "0",
:lose_battle => "0",
:low_hp_turn => "0",
:low_mp_turn => "0",
:only_alive => "16 * tcr",
:evasion => "0",
}, # Do not remove this.
# -------------------------------------------------------------------------
} # Do not remove this.
end # TP_MANAGER
end # YEA
#==============================================================================
# ▼ Editting anything past this point may potentially result in causing
# computer damage, incontinence, explosion of user's head, coma, death, and/or
# halitosis so edit at your own risk.
#==============================================================================
module YEA
module REGEXP
module ACTOR
TP_MODE = /<(?:TP_MODE|tp mode):[ ](\d+)>/i
UNLOCK_TP = /<(?:UNLOCK_TP|unlock tp):[ ]*(\d+(?:\s*,\s*\d+)*)>/i
end # ACTOR
module ENEMY
TP_MODE = /<(?:TP_MODE|tp mode):[ ](\d+)>/i
end # ENEMY
module BASEITEM
UNLOCK_TP = /<(?:UNLOCK_TP|unlock tp):[ ]*(\d+(?:\s*,\s*\d+)*)>/i
LEARN_TP = /<(?:LEARN_UNLOCK_TP|learn unlock tp):[ ]*(\d+(?:\s*,\s*\d+)*)>/i
TP_COST = /<(?:TP_COST|tp cost):[ ](\d+)>/i
end # BASEITEM
end # REGEXP
end # YEA
#==============================================================================
# ■ Switch
#==============================================================================
module Switch
#--------------------------------------------------------------------------
# self.tp_mode
#--------------------------------------------------------------------------
def self.tp_mode
return true if YEA::TP_MANAGER::TP_MODE_SWITCH <= 0
return $game_switches[YEA::TP_MANAGER::TP_MODE_SWITCH]
end
#--------------------------------------------------------------------------
# self.tp_mode_set
#--------------------------------------------------------------------------
def self.tp_mode_set(item)
return if YEA::TP_MANAGER::TP_MODE_SWITCH <= 0
$game_switches[YEA::TP_MANAGER::TP_MODE_SWITCH] = item
end
end # Switch
#==============================================================================
# ■ Numeric
#==============================================================================
class Numeric
#--------------------------------------------------------------------------
# new method: group_digits
#--------------------------------------------------------------------------
unless $imported["YEA-CoreEngine"]
def group; return self.to_s; end
end # $imported["YEA-CoreEngine"]
end # Numeric
#==============================================================================
# ■ DataManager
#==============================================================================
module DataManager
#--------------------------------------------------------------------------
# alias method: load_database
#--------------------------------------------------------------------------
class <<self; alias load_database_tpm load_database; end
def self.load_database
load_database_tpm
load_notetags_tpm
end
#--------------------------------------------------------------------------
# new method: load_notetags_tpm
#--------------------------------------------------------------------------
def self.load_notetags_tpm
groups = [$data_actors, $data_enemies, $data_items, $data_skills]
for group in groups
for obj in group
next if obj.nil?
obj.load_notetags_tpm
end
end
end
#--------------------------------------------------------------------------
# alias method: setup_new_game
#--------------------------------------------------------------------------
class <<self; alias setup_new_game_tpm setup_new_game; end
def self.setup_new_game
setup_new_game_tpm
Switch.tp_mode_set(YEA::TP_MANAGER::DEFAULT_ENABLE)
end
end # DataManager
#==============================================================================
# ■ RPG::Actor
#==============================================================================
class RPG::Actor < RPG::BaseItem
#--------------------------------------------------------------------------
# public instance variables
#--------------------------------------------------------------------------
attr_accessor :tp_mode
attr_accessor :unlocked_tp_modes
#--------------------------------------------------------------------------
# common cache: load_notetags_tpm
#--------------------------------------------------------------------------
def load_notetags_tpm
@tp_mode = nil
@unlocked_tp_modes = []
#---
self.note.split(/[\r\n]+/).each { |line|
case line
#---
when YEA::REGEXP::ACTOR::TP_MODE
@tp_mode = $1.to_i
when YEA::REGEXP::ACTOR::UNLOCK_TP
$1.scan(/\d+/).each { |num|
@unlocked_tp_modes.push(num.to_i) if num.to_i > 0 }
#---
end
} # self.note.split
#---
@tp_mode = YEA::TP_MANAGER::DEFAULT_TP_MODE if @tp_mode.nil?
if @unlocked_tp_modes.empty?
@unlocked_tp_modes = YEA::TP_MANAGER::DEFAULT_UNLOCKS.clone
end
@unlocked_tp_modes.push(@tp_mode) if !@unlocked_tp_modes.include?(@tp_mode)
@unlocked_tp_modes.uniq!
@unlocked_tp_modes.sort!
end
end # RPG::Actor
#==============================================================================
# ■ RPG::Enemy
#==============================================================================
class RPG::Enemy < RPG::BaseItem
#--------------------------------------------------------------------------
# public instance variables
#--------------------------------------------------------------------------
attr_accessor :tp_mode
#--------------------------------------------------------------------------
# common cache: load_notetags_tpm
#--------------------------------------------------------------------------
def load_notetags_tpm
@tp_mode = YEA::TP_MANAGER::DEFAULT_TP_MODE
#---
self.note.split(/[\r\n]+/).each { |line|
case line
#---
when YEA::REGEXP::ENEMY::TP_MODE
@tp_mode = $1.to_i
#---
end
} # self.note.split
#---
end
end # RPG::Enemy
#==============================================================================
# ■ RPG::BaseItem
#==============================================================================
class RPG::BaseItem
#--------------------------------------------------------------------------
# public instance variables
#--------------------------------------------------------------------------
attr_accessor :unlocked_tp_modes
attr_accessor :learn_tp_modes
attr_accessor :tp_cost
#--------------------------------------------------------------------------
# common cache: load_notetags_tpm
#--------------------------------------------------------------------------
def load_notetags_tpm
@unlocked_tp_modes = []
@learn_tp_modes = []
#---
self.note.split(/[\r\n]+/).each { |line|
case line
#---
when YEA::REGEXP::BASEITEM::UNLOCK_TP
$1.scan(/\d+/).each { |num|
@unlocked_tp_modes.push(num.to_i) if num.to_i > 0 }
when YEA::REGEXP::BASEITEM::LEARN_TP
$1.scan(/\d+/).each { |num|
@learn_tp_modes.push(num.to_i) if num.to_i > 0 }
when YEA::REGEXP::BASEITEM::TP_COST
next unless self.is_a?(RPG::Skill)
@tp_cost = $1.to_i
#---
end
} # self.note.split
#---
end
end # RPG::BaseItem
#==============================================================================
# ■ BattleManager
#==============================================================================
module BattleManager
#--------------------------------------------------------------------------
# alias method: load_database
#--------------------------------------------------------------------------
class <<self; alias battle_end_tpm battle_end;end
def self.battle_end(result)
battle_end_tpm(result)
case result
when 0
for member in $game_party.alive_members
member.tp += eval(member.tp_setting(:win_battle))
end
when 1
for member in $game_party.alive_members
member.tp += eval(member.tp_setting(:flee_battle))
end
end
end
end # BattleManager
#==============================================================================
# ■ Game_BattlerBase
#==============================================================================
class Game_BattlerBase
#--------------------------------------------------------------------------
# public instance variables
#--------------------------------------------------------------------------
attr_accessor :tp_mode
attr_accessor :unlocked_tp_modes
#--------------------------------------------------------------------------
# overwrite method: max_tp
#--------------------------------------------------------------------------
def max_tp; return YEA::TP_MANAGER::TP_LIMIT; end
#--------------------------------------------------------------------------
# anti-crash methods: max_tp, unlocked_tp_modes
#--------------------------------------------------------------------------
def tp_mode; return 0; end
def unlocked_tp_modes; return [0]; end
#--------------------------------------------------------------------------
# new method: tp_setting
#--------------------------------------------------------------------------
def tp_setting(setting)
return YEA::TP_MANAGER::TP_MODES[tp_mode][setting]
end
#--------------------------------------------------------------------------
# alias method: preserve_tp?
#--------------------------------------------------------------------------
alias game_battlerbase_preserve_tp_tpm preserve_tp?
def preserve_tp?
return true if tp_setting(:preserve_tp)
return game_battlerbase_preserve_tp_tpm
end
end # Game_BattlerBase
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler < Game_BattlerBase
#--------------------------------------------------------------------------
# overwrite method: init_tp
#--------------------------------------------------------------------------
def init_tp
self.tp = eval(tp_setting(:init_tp))
end
#--------------------------------------------------------------------------
# overwrite method: charge_tp_by_damage
#--------------------------------------------------------------------------
def charge_tp_by_damage(damage_rate)
self.tp += eval(tp_setting(:take_hp_dmg))
end
#--------------------------------------------------------------------------
# new method: charge_tp_by_mp_damage
#--------------------------------------------------------------------------
def charge_tp_by_mp_damage(damage_rate)
self.tp += eval(tp_setting(:take_mp_dmg))
end
#--------------------------------------------------------------------------
# overwrite method:
#--------------------------------------------------------------------------
def regenerate_tp
self.tp += eval(tp_setting(:regen_tp))
self.tp += eval(tp_setting(:low_hp_turn)) if self.hp < tp_low_hp
self.tp += eval(tp_setting(:low_mp_turn)) if self.mp < tp_low_mp
if friends_unit.alive_members.size == 1
self.tp += eval(tp_setting(:only_alive))
end
end
#--------------------------------------------------------------------------
# new method: tp_low_hp
#--------------------------------------------------------------------------
def tp_low_hp
return self.mhp * YEA::TP_MANAGER::LOW_HP
end
#--------------------------------------------------------------------------
# new method: tp_low_mp
#--------------------------------------------------------------------------
def tp_low_mp
return self.mmp * YEA::TP_MANAGER::LOW_MP
end
#--------------------------------------------------------------------------
# alias method: execute_damage
#--------------------------------------------------------------------------
alias game_battler_execute_damage_tpm execute_damage
def execute_damage(user)
game_battler_execute_damage_tpm(user)
return unless $game_party.in_battle
if @result.hp_damage > 0
user.tp += eval(user.tp_setting(:deal_hp_dmg))
gain_tp_ally_hp_damage
elsif @result.hp_damage < 0
user.tp += eval(user.tp_setting(:heal_hp_dmg))
end
if @result.mp_damage > 0
user.tp += eval(user.tp_setting(:deal_mp_dmg))
gain_tp_ally_mp_damage
charge_tp_by_mp_damage(@result.mp_damage)
elsif @result.mp_damage < 0
user.tp += eval(user.tp_setting(:heal_mp_dmg))
end
user.tp += eval(user.tp_setting(:kill_enemy)) if self.hp == 0
gain_tp_kill_ally if self.hp == 0
end
#--------------------------------------------------------------------------
# new method: gain_tp_ally_hp_damage
#--------------------------------------------------------------------------
def gain_tp_ally_hp_damage
for member in friends_unit.alive_members
next if member == self
member.tp += eval(member.tp_setting(:ally_hp_dmg))
end
end
#--------------------------------------------------------------------------
# new method: gain_tp_ally_mp_damage
#--------------------------------------------------------------------------
def gain_tp_ally_mp_damage
for member in friends_unit.alive_members
next if member == self
member.tp += eval(member.tp_setting(:ally_mp_dmg))
end
end
#--------------------------------------------------------------------------
# new method: gain_tp_kill_ally
#--------------------------------------------------------------------------
def gain_tp_kill_ally
for member in friends_unit.alive_members
next if member == self
member.tp += eval(member.tp_setting(:kill_ally))
end
end
#--------------------------------------------------------------------------
# alias method: item_effect_add_state
#--------------------------------------------------------------------------
alias game_battler_item_effect_add_state_tpm item_effect_add_state
def item_effect_add_state(user, item, effect)
original_states = states.clone
game_battler_item_effect_add_state_tpm(user, item, effect)
return unless $game_party.in_battle
if original_states != states && opponents_unit.members.include?(user)
user.tp += eval(user.tp_setting(:deal_state))
self.tp += eval(tp_setting(:gain_state))
end
end
#--------------------------------------------------------------------------
# alias method: item_apply
#--------------------------------------------------------------------------
alias game_battler_item_apply_tpm item_apply
def item_apply(user, item)
game_battler_item_apply_tpm(user, item)
return unless $game_party.in_battle
return if @result.hit?
self.tp += eval(tp_setting(:evasion))
end
#--------------------------------------------------------------------------
# alias method: item_test
#--------------------------------------------------------------------------
alias game_battler_item_test_tpm item_test
def item_test(user, item)
return false if item.for_dead_friend? != dead?
return true if item.unlocked_tp_modes.size > 0
return game_battler_item_test_tpm(user, item)
end
#--------------------------------------------------------------------------
# alias method: item_user_effect
#--------------------------------------------------------------------------
alias game_battler_item_user_effect_tpm item_user_effect
def item_user_effect(user, item)
game_battler_item_user_effect_tpm(user, item)
return unless actor?
for mode in item.unlocked_tp_modes
unlock_tp_mode(mode)
end
end
end # Game_Battler
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# alias method: setup
#--------------------------------------------------------------------------
alias game_actor_setup_tpm setup
def setup(actor_id)
game_actor_setup_tpm(actor_id)
@tp_mode = actor.tp_mode
@unlocked_tp_modes = actor.unlocked_tp_modes.clone
end
#--------------------------------------------------------------------------
# new method: tp_mode
#--------------------------------------------------------------------------
def tp_mode
@tp_mode = actor.tp_mode if @tp_mode.nil?
return @tp_mode
end
#--------------------------------------------------------------------------
# new method: unlocked_tp_modes
#--------------------------------------------------------------------------
def unlocked_tp_modes
if @unlocked_tp_modes.empty?
@unlocked_tp_modes = actor.unlocked_tp_modes.clone
end
return @unlocked_tp_modes.uniq
end
#--------------------------------------------------------------------------
# new method: change_tp_mode
#--------------------------------------------------------------------------
def change_tp_mode(mode)
@tp_mode = mode
unlock_tp_mode(mode)
self.tp = 0 if YEA::TP_MANAGER::CHANGE_TP_RESET
end
#--------------------------------------------------------------------------
# new method: unlock_tp_mode
#--------------------------------------------------------------------------
def unlock_tp_mode(mode)
if @unlocked_tp_modes.empty?
@unlocked_tp_modes = actor.unlocked_tp_modes.clone
end
@unlocked_tp_modes.push(mode)
@unlocked_tp_modes.uniq!
@unlocked_tp_modes.sort!
end
#--------------------------------------------------------------------------
# new method: remove_tp_mode
#--------------------------------------------------------------------------
def remove_tp_mode(mode)
if @unlocked_tp_modes.empty?
@unlocked_tp_modes = actor.unlocked_tp_modes.clone
end
@unlocked_tp_modes.delete(mode)
@tp_mode = @unlocked_tp_modes[0] if @tp_mode == mode
end
#--------------------------------------------------------------------------
# alias method: learn_skill
#--------------------------------------------------------------------------
alias game_actor_learn_skill_tpm learn_skill
def learn_skill(skill_id)
game_actor_learn_skill_tpm(skill_id)
for mode in $data_skills[skill_id].learn_tp_modes
unlock_tp_mode(mode)
end
end
end # Game_Actor
#==============================================================================
# ■ Game_Enemy
#==============================================================================
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# new method: tp_mode
#--------------------------------------------------------------------------
def tp_mode; return enemy.tp_mode; end
end # Game_Enemy
#==============================================================================
# ■ Game_Interpreter
#==============================================================================
class Game_Interpreter
#--------------------------------------------------------------------------
# new method: change_tp_mode
#--------------------------------------------------------------------------
def change_tp_mode(actor_id, mode)
$game_actors[actor_id].change_tp_mode(mode)
end
#--------------------------------------------------------------------------
# new method: unlock_tp_mode
#--------------------------------------------------------------------------
def unlock_tp_mode(actor_id, mode)
$game_actors[actor_id].unlock_tp_mode(mode)
end
#--------------------------------------------------------------------------
# new method: remove_tp_mode
#--------------------------------------------------------------------------
def remove_tp_mode(actor_id, mode)
$game_actors[actor_id].remove_tp_mode(mode)
end
#--------------------------------------------------------------------------
# new method: unlock_all_tp_modes
#--------------------------------------------------------------------------
def unlock_all_tp_modes(actor_id)
for key in YEA::TP_MANAGER::TP_MODES
$game_actors[actor_id].unlock_tp_mode(key[0])
end
end
#--------------------------------------------------------------------------
# new method: remove_all_tp_modes
#--------------------------------------------------------------------------
def remove_all_tp_modes(actor_id)
for key in YEA::TP_MANAGER::TP_MODES
next if key[0] == $data_actors[actor_id].tp_mode
$game_actors[actor_id].remove_tp_mode(key[0])
end
end
end # Game_Interpreter
#==============================================================================
# ■ Window_SkillCommand
#==============================================================================
class Window_SkillCommand < Window_Command
#--------------------------------------------------------------------------
# alias method: make_command_list
#--------------------------------------------------------------------------
alias window_skillcommand_make_command_list_tpm make_command_list
def make_command_list
return unless @actor
window_skillcommand_make_command_list_tpm
end
#--------------------------------------------------------------------------
# new method: add_tp_modes
#--------------------------------------------------------------------------
def add_tp_modes
return unless Switch.tp_mode
add_command(YEA::TP_MANAGER::MENU_NAME, :tp_mode, true, :tp_mode)
end
end # Window_SkillCommand
#==============================================================================
# ■ Window_SkillList
#==============================================================================
class Window_SkillList < Window_Selectable
#--------------------------------------------------------------------------
# new method: tp_mode?
#--------------------------------------------------------------------------
def tp_mode?; return @stype_id == :tp_mode; end
#--------------------------------------------------------------------------
# new method: tp_mode
#--------------------------------------------------------------------------
def tp_mode
return nil unless tp_mode?
return @data[index]
end
#--------------------------------------------------------------------------
# alias method: make_item_list
#--------------------------------------------------------------------------
alias window_skilllist_make_item_list_tpm make_item_list
def make_item_list
if tp_mode?
@data = @actor.unlocked_tp_modes
@data.sort!
else
window_skilllist_make_item_list_tpm
end
end
#--------------------------------------------------------------------------
# alias method: draw_item
#--------------------------------------------------------------------------
alias window_skilllist_draw_item_tpm draw_item
def draw_item(index)
if tp_mode?
draw_tp_mode_item(index)
else
window_skilllist_draw_item_tpm(index)
end
end
#--------------------------------------------------------------------------
# new method: draw_tp_mode_item
#--------------------------------------------------------------------------
def draw_tp_mode_item(index)
tp_mode = @data[index]
return unless YEA::TP_MANAGER::TP_MODES.include?(tp_mode)
rect = item_rect(index)
rect.width -= 4
icon = YEA::TP_MANAGER::TP_MODES[tp_mode][:icon]
draw_icon(icon, rect.x, rect.y)
change_color(tp_mode_colour(tp_mode))
name = YEA::TP_MANAGER::TP_MODES[tp_mode][:name]
draw_text(rect.x+24, rect.y, rect.width-24, line_height, name)
end
#--------------------------------------------------------------------------
# new method: tp_mode_colour
#--------------------------------------------------------------------------
def tp_mode_colour(mode)
if @actor.tp_mode == mode
return text_color(YEA::TP_MANAGER::EQUIPPED_COLOUR)
else
return normal_color
end
end
#--------------------------------------------------------------------------
# alias method: current_item_enabled?
#--------------------------------------------------------------------------
alias window_skilllist_current_item_enabled current_item_enabled?
def current_item_enabled?
if tp_mode?
return @actor.tp_mode != @data[index]
else
return window_skilllist_current_item_enabled
end
end
#--------------------------------------------------------------------------
# alias method: update_help
#--------------------------------------------------------------------------
alias window_skilllist_update_help_tpm update_help
def update_help
if tp_mode?
tp_mode = @data[index]
if YEA::TP_MANAGER::TP_MODES.include?(tp_mode)
text = YEA::TP_MANAGER::TP_MODES[tp_mode][:description]
else
text = ""
end
@help_window.set_text(text)
else
window_skilllist_update_help_tpm
end
end
end # Window_SkillList
#==============================================================================
# ■ Scene_Skill
#==============================================================================
class Scene_Skill < Scene_ItemBase
#--------------------------------------------------------------------------
# alias method: create_command_window
#--------------------------------------------------------------------------
alias scene_skill_create_command_window_tpm create_command_window
def create_command_window
scene_skill_create_command_window_tpm
@command_window.set_handler(:tp_mode, method(:command_skill))
end
#--------------------------------------------------------------------------
# alias method: on_item_ok
#--------------------------------------------------------------------------
alias scene_skill_on_item_ok_tpm on_item_ok
def on_item_ok
if @item_window.tp_mode?
Sound.play_equip
user.change_tp_mode(@item_window.tp_mode)
@status_window.refresh
@item_window.refresh
@item_window.activate
else
scene_skill_on_item_ok_tpm
end
end
end # Scene_Skill
#==============================================================================
#
# ▼ End of File
#
#==============================================================================