#==============================================================================
# Sideview Battle System Configurations Version 2.2xp
#==============================================================================
# Original Script by:
# Enu (http://rpgex.sakura.ne.jp/home/)
# Conversion to XP by:
# Atoa
# Original translation versions by:
# Kylock
# Translation continued by:
# Mr. Bubble
# XP version Translation by:
# cairn
# Special thanks:
# Shu (for translation help)
# Moonlight (for her passionate bug support for this script)
# NightWalker (for his community support for this script)
# XRXS (for the script of damage gravity, which was modified and
# used as the system's base of damage exibition)
# Squall (for the FF styled damage script, which was modified
# and added to the damage exibition system)
# KGC (for the STBreaker script, which was the base for the
# attribute limit system)
# Herena Isaberu (for her support in XP version bug fixes)
# Enu (for making an awesome battle system)
#==============================================================================
#==============================================================================
# ■ module N01
#------------------------------------------------------------------------------
# Sideview Battle System Config
#==============================================================================
module N01
#--------------------------------------------------------------------------
# ● Settings
#--------------------------------------------------------------------------
# Battle member starting positions
# X Y X Y X Y X Y
ACTOR_POSITION = [[460,180],[480,210],[500,240],[520,270]]
# Maximum party members that can fight at the same time.
# Remember to add/remove coordinates in ACTOR_POSITION if you adjust
# the MAX_MEMBER value.
MAX_MEMBER = 4
# Delay time after a battler completes an action in frames.
ACTION_WAIT = 6
# Delay time before enemy collapse (defeat of enemy) animation in frames.
COLLAPSE_WAIT = 6
# Delay before victory is processed in frames.
WIN_WAIT = 30
# Animation ID for any unarmed attack.
NO_WEAPON = 4
# Damage modifications when using two weapons. Values are percentages.
# 1st Wpn, 2nd Wpn
TWO_SWORDS_STYLE = [100,50]
# Auto-Life State: Revivial Animation ID
RESURRECTION = 25
# POP Window indicator words. For no word results, use "".
POP_MISS = "Miss" # Attack missed
POP_EVA = "Evade" # Attack avoided
POP_CRI = "Critical" # Attack scored a critical hit
# Set to false to remove shadow under actors
SHADOW = true
# true: Use actor's walking graphic.
# false: Don't use actor's walking graphic.
# If false, battler file with "_1" is required since walking file is not used.
# "_1" and subsequent files ("_2", "_3", etc.) should be uniform in size.
WALK_ANIME = true
# Number of frames in a battler animation file. (horizontal frames)
ANIME_PATTERN = 4
# Number of types of battler animation file. (vertical frames)
ANIME_KIND = 4
#==============================================================================
# ■ Single Action Engine
#------------------------------------------------------------------------------
# These are utilized by sequenced actions and have no utility alone.
#==============================================================================
# A single-action cannot be used by itself unless it is used as part of a
# sequence.
ANIME = {
#--------------------------------------------------------------------------
# ● Battler Animations
#--------------------------------------------------------------------------
# No. - Battler graphic file used.
# 0: Normal Battler Graphic. In the case of Actors, 0 refers to
# default walking graphic.
# n: "Character Name + _n", where n refers to the file number
# extension. An example file would be "$Ralph_1". These
# files are placed in the Characters folder.
# Use "1" for non-standard battler, like Minkoff's.
#
# Row - Vertical position (row) of cells in battler graphic file. (0~3)
# Speed - Refresh rate of animation. Lower numbers are faster.
# Loop - [0: "Round-Trip" Loop] Example: 1 2 3 2 1 2 3 2 1 ...
# [1: "One-Way" Loop] Example: 1 2 3 1 2 3 1 2 3 ...
# [2: One Loop, no repeat] Example: 1 2 3 .
# Wait - Time, in frames, before animation loops again.
# Does not apply if Loop=2
# Fixed - Defines loop behavior or specific fixed cell display.
# -2: Reverse Loop Animation
# -1: Normal Loop Animation
# 0: No Loop Animation
# 0~3: Fixed cell display. Refers to cell on character sprite
# sheet starting where 0 = left-most cell.
# Z - Set battler's Z priority.
# Shadow - Set true to display battler shadow during animation; false to hide.
# Weapon - Weapon animation to play with battler animation. For no weapon
# animation, use "".
# Action Name No. Row Speed Loop Wait Fixed Z Shadow Weapon
"WAIT" => [ 0, 1, 15, 0, 0, -1, 0, true,"" ],
"WAIT(FIXED)" => [ 0, 1, 10, 2, 0, 0, 0, true,"" ],
"RIGHT(FIXED)" => [ 0, 2, 10, 1, 2, 0, 0, true,"" ],
"DAMAGE" => [ 0, 3, 4, 2, 0, -1, 0, true,"" ],
"ATTACK_FAIL" => [ 0, 3, 10, 1, 8, 1, 0, true,"" ],
"MOVE_TO" => [ 0, 1, 1, 1, 0, -1, 0, true,"" ],
"MOVE_AWAY" => [ 0, 2, 2, 1, 0, -1, 0, true,"" ],
"ABOVE_DISPLAY" => [ 0, 1, 2, 1, 0, -1, 600, true,"" ],
"WPN_SWING_V" => [ 0, 1, 1, 2, 0, -1, 2, true,"VERT_SWING"],
"WPN_SWING_VL" => [ 0, 1, 1, 2, 0, -1, 2, true,"VERT_SWINGL"],
"WPN_SWING_VS" => [ 0, 1, 6, 2, 0, -1, 2, true,"VERT_SWING"],
"WPN_SWING_UNDER" => [ 0, 1, 2, 2, 0, -1, 2, true,"UNDER_SWING"],
"WPN_SWING_OVER" => [ 0, 1, 2, 2, 0, -1, 2, true,"OVER_SWING"],
"WPN_RAISED" => [ 0, 1, 2, 2, 28, -1, 2, true,"RAISED"],
#--------------------------------------------------------------------------
# ● Weapon Animations
#--------------------------------------------------------------------------
# Weapon Animations can only be used with Battler Animations as seen
# and defined above.
#
# Xa - Distance weapon sprite is moved on the X-axis.
# Ya - Distance weapon sprite is moved on the Y-axis. Please note that
# the Y-axis is inverted. This means negative values move up, positive
# values move down.
# Za - If true, weapon sprite is displayed over battler sprite.
# If false, weapon sprite is displayed behind battler sprite.
# A1 - Starting angle of weapon sprite rotation. Negative numbers will
# result in counter-clockwise rotation.
# A2 - Ending angle of weapon sprite rotation. Rotation will stop here.
# Or - Rotation Origin - [0: Center] [1: Upper Left] [2: Upper Right]
# [3:Bottom Left] [4:Bottom Right]
# Inv - Invert - If true, horizontally inverts weapon sprite.
# Xs - X scale - Stretches weapon sprite horizontally by a factor of X.
# Values may be decimals. (0.6, 0.9, etc.)
# Ys - Y scale - Stretches weapon sprite vertically by a factor of Y.
# Values may be decimals. (0.6, 0.9, etc.)
# Xp - X pitch - For adjusting the X axis. This number changes the initial
# X coordinate.
# Yp - Y pitch - For adjusting the Y axis. This number changes the initial
# Y coordinate.
# Weapon2 - If set to true, Two Weapon Style's Weapon 2 sprite will be used
# instead.
# Action Name Xa Ya Za A1 A2 Or Inv Xs Ys Xp Yp Weapon2
"VERT_SWING" => [ 6, 8,false,-135, 45, 4,false, 1, 1, -6, -12,false],
"VERT_SWINGL" => [ 6, 8,false,-135, 45, 4,false, 1, 1, -6, -12, true],
"UNDER_SWING" => [ 6, 8,false, 270, 45, 4,false, 1, 1, -6, -12,false],
"OVER_SWING" => [ 6, 8,false, 45,-100, 4,false, 1, 1, -6, -12,false],
"RAISED" => [ 6, -4,false, 90, -45, 4,false, 1, 1, -6, -12,false],
#--------------------------------------------------------------------------
# ● Battler Movements
#--------------------------------------------------------------------------
# Origin - Defines the origin of movement based on an (x,y) coordinate plane.
# 1 unit = 1 pixel
# [0: Battler's Current Position]
# [1: Battler's Selected Target]
# [2: Screen; (0,0) is at upper-left of screen]
# [3: Battle Start Position]
# X - X-axis pixels from origin.
# Y - Y-axis pixels from origin. Please note that the Y-axis is
# inverted. This means negative values move up, positive values move down.
# Time - Travel time. Larger numbers are slower. The distance is
# divided by one frame of movement.
# Accel - Positive values accelerates frames. Negative values decelerates.
# Jump - Negative values produce a jumping arc. Positive values produce
# a reverse arc. [0: No jump]
# Animation - Battler Animation utilized during movement.
# Origin X Y Time Accel Jump Animation
"NO_MOVE" => [ 0, 0, 0, 1, 0, 0, "WAIT(FIXED)"],
"START_POSITION" => [ 0, 54, 0, 1, 0, 0, "MOVE_TO"],
"BEFORE_MOVE" => [ 3, -32, 0, 18, -1, 0, "MOVE_TO"],
"AFTER_MOVE" => [ 0, 32, 0, 8, -1, 0, "MOVE_TO"],
"4_MAN_ATTACK_1" => [ 2, 564, 186, 12, -1, 0, "MOVE_TO"],
"4_MAN_ATTACK_2" => [ 2, 564, 212, 12, -1, 0, "MOVE_TO"],
"4_MAN_ATTACK_3" => [ 2, 504, 174, 12, -1, 0, "MOVE_TO"],
"4_MAN_ATTACK_4" => [ 2, 504, 254, 12, -1, 0, "MOVE_TO"],
"DEAL_DAMAGE" => [ 0, 32, 0, 4, -1, 0, "DAMAGE"],
"EXTRUDE" => [ 0, 12, 0, 1, 1, 0, "DAMAGE"],
"FLEE_SUCCESS" => [ 0, 300, 0,300, 1, 0, "MOVE_AWAY"],
"FLEE_FAIL" => [ 0, 48, 0, 16, 1, 0, "MOVE_AWAY"],
"VICTORY_JUMP" => [ 0, 0, 0, 20, 0, -5, "MOVE_TO"],
"MOVING_TARGET" => [ 1, 0, 0, 18, -1, 0, "MOVE_TO"],
"MOVING_TARGET_FAST" => [ 1, 0, -12, 8, 0, -2, "MOVE_TO"],
"PREV_MOVING_TARGET" => [ 1, 24, 0, 12, -1, 0, "MOVE_TO"],
"PREV_MOVING_TARGET_FAST" => [ 1, 24, 0, 1, 0, 0, "MOVE_TO"],
"MOVING_TARGET_RIGHT" => [ 1, 96, 32, 16, -1, 0, "MOVE_TO"],
"MOVING_TARGET_LEFT" => [ 1, 96, -32, 16, -1, 0, "MOVE_TO"],
"JUMP_TO" => [ 0, -32, 0, 8, -1, -4, "MOVE_TO"],
"JUMP_AWAY" => [ 0, 32, 0, 8, -1, -4, "MOVE_AWAY"],
"JUMP_TO_TARGET" => [ 1, 12, -12, 12, -1, -6, "MOVE_TO"],
"THROW_ALLY" => [ 0, -24, 0, 16, 0, -2, "MOVE_TO"],
"TRAMPLE" => [ 1, 12, -32, 12, -1, -6, "ABOVE_DISPLAY"],
"PREV_JUMP_ATTACK" => [ 0, -32, 0, 12, -1, -2, "WPN_SWING_V"],
"PREV_STEP_ATTACK" => [ 1, 12, 0, 12, -1, -5, "WPN_SWING_VS"],
"REAR_SWEEP_ATTACK" => [ 1, 12, 0, 16, 0, -3, "WPN_SWING_V"],
"JUMP_FIELD_ATTACK" => [ 1, 0, 0, 16, 0, -5, "WPN_SWING_V"],
"DASH_ATTACK" => [ 1, -96, 0, 16, 2, 0, "WPN_SWING_V"],
"RIGHT_DASH_ATTACK" => [ 1, -96, 32, 16, 2, 0, "WPN_SWING_V"],
"LEFT_DASH_ATTACK" => [ 1, -96, -32, 16, 2, 0, "WPN_SWING_V"],
"RIGHT_DASH_ATTACK2" => [ 1,-128, 48, 16, 2, 0, "WPN_SWING_V"],
"LEFT_DASH_ATTACK2" => [ 1,-128, -48, 16, 2, 0, "WPN_SWING_V"],
#--------------------------------------------------------------------------
# ● Battler Float Animations
#--------------------------------------------------------------------------
# These types of single-actions defines the movement of battlers from their
# own shadows. Please note that it is not possible to move horizontally
# while floating from a shadow.
#
# Type - Always "float".
# A - Starting float height. Negative values move up.
# Positive values move down.
# B - Ending float height. This height is maintained until another action.
# Time - Duration of movement from point A to point B
# Animation - Specifies the Battler Animation to be used.
# Type A B Time Animation
"FLOAT_" => ["float", -22, -20, 2, "WAIT(FIXED)"],
"FLOAT_2" => ["float", -20, -18, 2, "WAIT(FIXED)"],
"FLOAT_3" => ["float", -18, -20, 2, "WAIT(FIXED)"],
"FLOAT_4" => ["float", -20, -22, 2, "WAIT(FIXED)"],
"JUMP_STOP" => ["float", 0, -80, 4, "WAIT(FIXED)"],
"JUMP_LAND" => ["float", -80, 0, 4, "WAIT(FIXED)"],
"LIFT" => ["float", 0, -30, 4, "WAIT(FIXED)"],
#--------------------------------------------------------------------------
# ● Battler Position Reset
#--------------------------------------------------------------------------
# These types of single-actions define when a battler's turn is over and
# will reset the battler back to its starting coordinates. This type of
# single-action is required in all sequences.
#
# Please note that after a sequence has used this type of single-action,
# no more damage can be done by the battler since its turn is over.
#
# Type - Always "reset"
# Time - Time it takes to return to starting coordinates. Movement speed
# fluctuates depending on distance from start coordinates.
# Accel - Positive values accelerate. Negative values decelerate.
# Jump - Negative values produce a jumping arc. Positive values produce
# a reverse arc. [0: No jump]
# Animation - Specifies the Battler Animation to be used.
# Type Time Accel Jump Animation
"COORD_RESET" => ["reset", 16, 0, 0, "MOVE_TO"],
"FLEE_RESET" => ["reset", 16, 0, 0, "MOVE_AWAY"],
#--------------------------------------------------------------------------
# ● Forced Battler Actions
#--------------------------------------------------------------------------
# These types of single-actions allow forced control of other battlers
# that you define.
#
# Type - Specifies action type. "SINGLE" or "SEQUENCE"
#
# Object - The battler that will execute the action defined under Action
# Name. 0 is for selected target, and any other number is a State
# number (1~999), and affects all battlers with the State on them.
# By adding a - (minus sign) followed by a Skill ID number (1~999),
# it will define the actors that know the specified skill, besides
# the original actor.
# If you want to designate an actor by their index ID number,
# add 1000 to their index ID number. If the system cannot designate
# the index number(such as if actor is dead or ran away), it will
# select the nearest one starting from 0. If a response fails,
# the action will be canceled. (Example: Ylva's actor ID is 4. A
# value of 1004 would define Ylva as the Object.)
#
# Reset Type - Specifies method of returning the battler to its original
# location.
# Action Name - Specifies action used. If Type is SINGLE, then Action Name
# must be a single-action function. If Type is SEQUENCE,
# the Action Name must an action sequence name.
# Type Object Reset Type Action Name
"LIGHT_BLOWBACK" => ["SINGLE", 0, "COORD_RESET", "EXTRUDE"],
"RIGHT_TURN" => ["SINGLE", 0, "COORD_RESET", "CLOCKWISE_TURN"],
"DROP_DOWN" => ["SINGLE", 0, "COORD_RESET", "Y_SHRINK"],
"IMPACT_1" => ["SINGLE", 0, "COORD_RESET", "OBJ_TO_SELF"],
"LIFT_ALLY" => ["SINGLE", 0, "", "LIFT"],
"ULRIKA_ATTACK" => ["SEQUENCE", 18, "COORD_RESET", "ULRIKA_ATTACK_1"],
"4_MAN_ATK_1" => ["SEQUENCE", -101, "COORD_RESET", "4_MAN_ATTACK_1"],
"4_MAN_ATK_2" => ["SEQUENCE", -102, "COORD_RESET", "4_MAN_ATTACK_2"],
"4_MAN_ATK_3" => ["SEQUENCE", -103, "COORD_RESET", "4_MAN_ATTACK_3"],
"ALLY_FLING" => ["SEQUENCE", 1000, "COORD_RESET", "THROW"],
#--------------------------------------------------------------------------
# ● Target Modification
#--------------------------------------------------------------------------
# Changes battler's target in battle. Original target will still be stored.
# Current battler is the only battler capable of causing damage.
#
# Type - Always "target"
#
# Object - The battler that will have its target modified. 0 is selected
# target, any other number is a State ID number (1~999), and
# changes all battlers with that state on them to target the new
# designated target.
# If you want to designate an actor by their index ID number,
# add 1000 to their index ID number. If the system cannot designate
# the index number(such as if actor is dead or ran away), it will
# select the nearest one starting from 0. If a response fails,
# the action will be canceled. (Example: Ylva's actor ID is 4. A
# value of 1004 would define Ylva as the Object.)
#
# Target - New Target. [0=Self] [1=Self's Target]
# [2=Self's Target After Modification]
# [3=Reset to Previous Target (if 2 was used)]
# Target Mod name Type Object Target
"REAL_TARGET" => ["target", 0, 0],
"TWO_UNIFIED_TARGETS" => ["target", 18, 1],
"FOUR_UNIFIED_TARGETS" => ["target", 19, 1],
"ALLY_TO_THROW" => ["target", 1000, 2],
"THROW_TARGET" => ["target", 1000, 3],
#--------------------------------------------------------------------------
# ● Skill Linking
#--------------------------------------------------------------------------
# Linking to the next skill will stop any current action. Linking to the
# next skill will also require and consume MP/HP cost of that skill.
#
# Type - Always "der"
# Chance - Chance, in percent, to link to the defined skill ID. (0~100)
# Link - true: actor does not require Skill ID learned to link.
# false: actor requires Skill ID learned.
# Skill ID - ID of the skill that will be linked to.
# Action Name Type Chance Link Skill ID
"LINK_SKILL_91" => ["der", 100, true, 91],
"LINK_SKILL_92" => ["der", 100, true, 92],
#--------------------------------------------------------------------------
# ● Action Conditions
#--------------------------------------------------------------------------
# If the condition is not met, all current actions are canceled.
#
# A: Type - always "nece"
# B: Object - Object that Condition refers to. [0=Self] [1=Target]
# [2=All Enemies] [3=All Allies]
# C: Content - [0=State] [1=Parameter] [2=Switch] [3=Variable] [4=Skill]
#
# D: Condition - This value is determined by the value you set for Content.
# [0] State: State ID
# [1] Parameter: [0=Current HP] [1=Current MP] [2=ATK] [3=DEX] [4=AGI] [5=INT]
# [2] Switch: Game Switch Number
# [3] Variable: Game Variable Number
# [4] Skill: Skill ID
#
# E: Supplement - Supplement for the Condition as defined above.
# [0] State: Amount required. If number is positive, the condition is how
# many have the state, while a negative number are those who
# don't have the state.
# [1] Parameter: If Object is more than one battler, average is used.
# Success if Parameter is greater than value. If Value
# is negative, then success if lower.
# [2] Switch: [true: Switch ON succeeds] [false: Switch OFF succeeds]
# [3] Variable: Game variable value used to determine if condition is met. If
# supplement value is positive, Game Variable must have more
# than the defined amount to succeed. If supplement value has a
# minus symbol (-) attached, Game Variable must have less than
# the defined amount to succeed. (Ex: -250 means the Game
# Variable must have a value less than 250 to succeed.)
# [4] Skill: Required amount of battlers that have the specified skill
# ID learned.
# Type Obj Cont Cond Supplement
# A B C D E
"2_MAN_ATK_COND" => ["nece", 3, 0, 18, 1],
"4_MAN_ATK_COND" => ["nece", 3, 0, 19, 3],
"FLOAT_STATE" => ["nece", 0, 0, 17, 1],
"CAT_STATE" => ["nece", 0, 0, 20, 1],
#--------------------------------------------------------------------------
# ● Battler Rotation
#--------------------------------------------------------------------------
# Rotates battler image. Weapon Animations are not automatically adjusted
# for Battler Rotation like with Invert settings.
#
# Type - always "angle"
# Time - Duration duration of rotation animation in frames.
# Start - Starting angle. 0-360 degrees. Can be negative.
# End - Ending Angle. 0-360 degrees. Can be negative.
# Return - true: End of rotation is the same as end of duration.
# false: Rotation animation as defined.
# Type Time Start End Return
"FALLEN" => ["angle", 1, -90, -90,false],
"CLOCKWISE_TURN" => ["angle", 48, 0,-360,false],
"COUNTERCLOCKWISE_TURN" => ["angle", 6, 0, 360,false],
#--------------------------------------------------------------------------
# ● Battler Zoom
#--------------------------------------------------------------------------
# Stretch and shrink battler sprites with these single-actions.
#
# Type - always "zoom"
# Time - Duration of zoom animation in frames.
# X - X scale - Stretches battler sprite horizontally by a factor of X.
# 1.0 is normal size, 0.5 is half size.
# Y - Y scale - Stretches battler sprite vertically by a factor of Y.
# 1.0 would be normal size, 0.5 would be half size.
# Return - true: End of rotation is the same as end of duration.
# false: Zoom animation as defined.
# Battler zoom is still temporary.
# Type Time X Y Return
"X_SHRINK" => ["zoom", 16, 0.5, 1.0, true],
"Y_SHRINK" => ["zoom", 16, 1.0, 0.5, true],
#--------------------------------------------------------------------------
# ● Damage and Database-Assigned Animations
#--------------------------------------------------------------------------
# These single-actions deal with animations, particularly with those assigned
# in the Database for Weapons, Skills and Items. These are what causes
# any damage/healing/state/etc. application from Weapons, Skills and Items.
#
# A difference between "anime" and "m_a" single-actions is that
# "anime" triggered animations will move with the Object on the screen. The
# Z-axis of animations will always be over battler sprites. If "OBJ_ANIM"
# is added at the beginning of the name, it will be both damage and defined
# animation.
#
# Type - always "anime"
# ID - (-1): Uses assigned animation from game Database.
# (-2): Uses equipped Weapon animation as assigned in the Database.
# (1~999): Database Animation ID.
# Object - [0=Self] [1=Target]
# Invert - If set to true, the animation is inverted horizontally.
# Wait - true: Sequence will not continue until animation is completed.
# false: Sequence will continue regardless of animation length.
# Weapon2 - true: If wielding two weapons, damage and animation will be
# based off Weapon 2.
# Type ID Object Invert Wait Weapon2
"OBJ_ANIM" => ["anime", -1, 1, false,false, false],
"OBJ_ANIM_WEIGHT" => ["anime", -1, 1, false, true, false],
"OBJ_ANIM_WEAPON" => ["anime", -2, 1, false,false, false],
"OBJ_ANIM_L" => ["anime", -1, 1, false,false, true],
"HIT_ANIM" => ["anime", 14, 1, false,false, false],
"KILL_HIT_ANIM" => ["anime", 67, 1, false,false, false],
#--------------------------------------------------------------------------
# ● Movement and Display of Animations
#--------------------------------------------------------------------------
# These single-actions provide motion options for animations used for
# effects such as long-ranged attacks and projectiles. Weapon sprites
# may also substitute animations.
#
# A difference between "m_a" and "anime" single-actions is that "m_a"
# animations will stay where the Object was even if the Object moved.
#
# Type - always "m_a"
# ID - 1~999: Database Animation ID
# 0: No animation displayed.
# Object - Animation's target. [0=Target] [1=Enemy's Area]
# [2=Party's Area] [4=Self]
# Pass - [0: Animation stops when it reaches the Object.]
# [1: Animation passes through the Object and continues.]
# Time - Duration of animation travel time and display. Larger values
# decrease travel speed. Increase this value if the animation
# being played is cut short.
# Arc - Trajectory - Positive values produce a low arc.
# Negative values produce a high arc.
# [0: No Arc]
# Xp - X Pitch - This value adjusts the initial X coordinate of the
# animation. Enemy calculation will be automatically inverted.
# Yp - Y Pitch - This value adjusts the initial X coordinate of the
# animation.
# Start - Defines origin of animation movement.
# [0=Self] [1=Target] [2=No Movement]
# Z-axis - true: Animation will be over the battler sprite.
# false: Animation will be behind battler sprite.
# Weapon - Insert only "Throwing Weapon Rotation" and
# "Throwing Skill Rotation" actions. For no weapon sprite, use "".
# Type ID Object Pass Time Arc Xp Yp Start Z Weapon
"START_MAGIC_ANIM" => ["m_a", 2, 4, 0, 52, 0, 0, 0, 2,false,""],
"OBJ_TO_SELF" => ["m_a", 51, 0, 0, 18, 0, 0, 0, 1,false,""],
"START_WEAPON_THROW"=> ["m_a", 0, 0, 0, 16, -24, 0, 0, 0,false,"WPN_ROTATION"],
"END_WEAPON_THROW" => ["m_a", 0, 0, 0, 16, 24, 0, 0, 1,false,"WPN_ROTATION"],
"STAND_CAST" => ["m_a",100, 1, 0, 64, 0, 0, 0, 2, true,""],
#--------------------------------------------------------------------------
# ● Throwing Weapon Rotation
#--------------------------------------------------------------------------
# These are used to rotate weapon sprites that are "thrown" with Movement of
# Animation single-actions. These must be used while the sprite is in flight.
# You may assign a different weapon graphic to be thrown in this
# configuration script under Throwing Weapon Graphic Settings.
#
# Start - Starting angle in degrees (0-360)
# End - Ending angle in degrees. (0-360)
# Time - Duration, in frames, of a single rotation. Rotation will continue
# until the animation is complete.
# Start Angle Time
"WPN_ROTATION" => [ 0, 360, 8],
#--------------------------------------------------------------------------
# ● Throwing Skill Rotation
#--------------------------------------------------------------------------
# Different from Throwing Weapon Rotation. These single-actions are used to
# rotate weapon sprites that are "thrown" with Movement of Animation single
# actions. These are specifically used with skills. You may assign a different weapon graphic to be
# thrown in this configuration script under Throwing Weapon Graphic Settings.
#
# Start - Starting angle in degrees (0-360)
# End - Ending angle in degrees. (0-360)
# Time - Duration, in frames, of a single rotation. Rotation will continue
# until the animation is complete.
# Type - Always "skill".
# Weapon Action Name Start End Time Type
"WPN_THROW" => [ 0, 360, 8, "skill"],
#--------------------------------------------------------------------------
# ● Status Balloon Animation
#--------------------------------------------------------------------------
# Uses Balloon.png in the System folder.
#
# Type - Always "balloon"
# Row - Determines row from the Balloon.png (0~9)
# Loop - Balloon loop behavior. Balloon disappears when loop is
# complete. [0="One-Way" Loop] [1="Round-Trip" Loop]
# Emote Name Type Row Loop
"STATUS-NORMAL" => ["balloon", 6, 1],
"STATUS-CRITICAL" => ["balloon", 5, 1],
"STATUS-SLEEP" => ["balloon", 9, 1],
#--------------------------------------------------------------------------
# ● Sound Effect Actions
#--------------------------------------------------------------------------
# Type1 - always "sound"
# Type2 - ["se","bgm","bgs"]
# Pitch - Value between 50 and 150.
# Vol - Volume - Value between 0 and 100.
# Filename - Name of the sound to be played.
# Type1 Type2 Pitch Vol Filename
"062-Swing01" => ["sound", "se", 80, 100, "062-Swing01"],
#--------------------------------------------------------------------------
# ● Game Speed Modifier
#--------------------------------------------------------------------------
# Type - always "fps"
# Speed - Speed in Frames Per Second. 40 is normal frame rate.
# Use with care as this function modifies FPS directly and will conversly
# affect any active timers or time systems.
# Type Speed
"FPS_SLOW" => ["fps", 20],
"FPS_NORMAL" => ["fps", 40],
#--------------------------------------------------------------------------
# ● State Granting Effects
#--------------------------------------------------------------------------
# Type - always "sta+"
# Object - [0=Self] [1=Target] [2=All Enemies] [3=All Allies]
# [4=All Allies (excluding user)]
# State ID - State ID to be granted.
# Type Object State ID
"2_MAN_TECH_GRANT" => ["sta+", 0, 18],
"4_MAN_TECH_GRANT" => ["sta+", 0, 19],
"CATFORM_GRANT" => ["sta+", 0, 20],
#--------------------------------------------------------------------------
# ● State Removal Effects
#--------------------------------------------------------------------------
# Type - always "sta-"
# Object - [0=Self] [1=Target] [2=All Enemies] [3=All Allies]
# [4=All Allies (excluding user)]
# State ID - State ID to be removed.
# Type Object State ID
"2_MAN_TECH_REVOKE" => ["sta-", 3, 18],
"4_MAN_TECH_REVOKE" => ["sta-", 3, 19],
#--------------------------------------------------------------------------
# ● Battler Transformation Effects
#--------------------------------------------------------------------------
# Type - always "change"
# Reset - true: Battler sprite reverts back to default file after battle.
# false: Transformation is permanent after battle.
# Filename - Battler graphics file that will be transformed to.
# Type Reset Filename
"TRANSFORM_CAT" => ["change", true,"007-Fighter07"],
"TRANSFORM_CANCEL" => ["change", true,"040-Mage08"],
#--------------------------------------------------------------------------
# ● Cut-In Image Effects
#--------------------------------------------------------------------------
# Only one image can be displayed at a time.
#
# X1 - Image's starting X-coordinate.
# Y1 - Starting Y-coordinate.
# X2 - Ending X-coordinate.
# Y2 - Ending Y-coordinate.
# Time - Length of time from start to end. Higher value is slower.
# Z-axis - true: Image appears over BattleStatus Window.
# false: Image appears behind BattleStatus Window.
# Filename - File name from .Graphics\Pictures folder.
# Type X1 Y1 X2 Y2 Time Z-axis Filename
"CUT_IN_START" => ["pic",-280, 48, 0, 64, 14, false,"016-Thief01"],
"CUT_IN_END" => ["pic", 0, 48, 640, 64, 12, false,"016-Thief01"],
#--------------------------------------------------------------------------
# ● Game Switch Settings
#--------------------------------------------------------------------------
# Type - Always "switch"
# Switch - Switch number from the game database.
# ON/OFF - [true:Switch ON] [false:Switch OFF]
#
# Type Switch ON/OFF
"GAME_SWITCH_1_ON" => ["switch", 1, true],
#--------------------------------------------------------------------------
# ● Game Variable Settings
#--------------------------------------------------------------------------
# Type - Always "variable"
# Var - Variable Number from the game database.
# Oper - [0=Set] [1=Add] [2=Sub] [3=Mul] [4=Div] [5=Mod]
# X - value of the operation.
#
# Type Var Oper X
"GAME_VAR_1_+1" => ["variable", 1, 1, 1],
#--------------------------------------------------------------------------
# ● Script Operation Settings
#--------------------------------------------------------------------------
# Type - Always "script"
#
# Inserts a simple script code into the action sequence. In the sample,
# where it says p=1 can be replaced with any script. Character strings
# and anything beyond functions will not work. (?)
# Type
"TEST_SCRIPT" => ["script", "
p = 1
"],
#--------------------------------------------------------------------------
# ● Special Modifiers - DO NOT CHANGE THESE NAMES
#--------------------------------------------------------------------------
# Clear image - Clears images such as Cut-in graphics.
# Afterimage ON - Activates Afterimage of battler.
# Afterimage OFF - Deactivates Afterimage.
# Invert - Invert animation. Use Invert again in a sequence to cancel
# because "COORD_RESET" does not reset Invert.
# Don't Wait - Any actions after Don't Wait is applied are done instantly.
# Apply "Don't Wait" again in a sequence to trigger off.
# Can Collapse - Triggers collapse of battler when HP is 0.
# Required in every damage sequence.
# Two Wpn Only - The single-action following Two Wpn Only will only execute
# if the actor is wielding two weapons. If the actor is not,
# the single-action will be skipped and will move on to the next.
# One Wpn Only - The single-action following One Wpn Only will only execute
# if the actor is wielding one weapon. If the actor is not,
# the single-action will be skipped and will move on to the next.
# Process Skill - The Return marker for individual processing of a skill.
# Process Skill End - The End marker for individual processing of a skill.
# Start Pos Change - Changes the Start Position to wherever the battler
# currently is on screen.
# Start Pos Return - Returns battler to original Start Position.
# Cancel Action - Trigger the "end" of battler's turn which will cause the
# the next battler's turn to execute.
# This includes the function of Can Collapse, and no
# additional damage can be dealt by the battler after this.
# End - This is used when no action is automatically recognized.
#
# Note: If you wish to understand how Process Skill and Process Skill End
# functions, please examine the "SKILL_ALL" sequence in this Config
# and use the Float All skill provided in the demo to see how it works.
"Clear image" => ["Clear image"],
"Afterimage ON" => ["Afterimage ON"],
"Afterimage OFF" => ["Afterimage OFF"],
"Invert" => ["Invert"],
"Don't Wait" => ["Don't Wait"],
"Can Collapse" => ["Can Collapse"],
"Two Wpn Only" => ["Two Wpn Only"],
"One Wpn Only" => ["One Wpn Only"],
"Process Skill" => ["Process Skill"],
"Process Skill End" => ["Process Skill End"],
"Start Pos Change" => ["Start Pos Change"],
"Start Pos Return" => ["Start Pos Return"],
"Cancel Action" => ["Cancel Action"],
"End" => ["End"]
#--------------------------------------------------------------------------
# ● About Wait
#--------------------------------------------------------------------------
# When there is only a numerical value as a single-action name, it will be
# considered a delay, in frames, before the Action Sequence continues.
# (i.e. "10", "42") Because of this, single-action function names for the
# effects defined above cannot be entirely numerical. Any Battler Animations
# that have been prompted will persist when Waiting.
}
#==============================================================================
# ■ Action Sequence
#------------------------------------------------------------------------------
# Action sequences are made of the single-action functions defined above.
#==============================================================================
# Action Sequences defined here can be used for Actor/Enemy actions below.
# Sequences are processed left to right in order.
ACTION = {
#------------------------------- Basic Actions --------------------------------
"BATTLE_START" => ["START_POSITION","COORD_RESET"],
"WAIT" => ["WAIT"],
"WAIT-CRITICAL" => ["NO_MOVE","WAIT(FIXED)","STATUS-CRITICAL","22"],
"WAIT-NORMAL" => ["NO_MOVE","WAIT(FIXED)","STATUS-NORMAL","22"],
"WAIT-SLEEP" => ["NO_MOVE","WAIT(FIXED)","STATUS-SLEEP","22"],
"WAIT-FLOAT" => ["WAIT(FIXED)","6","FLOAT_","4",
"FLOAT_2","4","FLOAT_3","4",
"FLOAT_4","4"],
"DEAD" => ["FALLEN","ATTACK_FAIL"],
"DAMAGE" => ["DEAL_DAMAGE","COORD_RESET"],
"FLEE" => ["FLEE_SUCCESS"],
"ENEMY_FLEE" => ["FLEE_SUCCESS","COORD_RESET"],
"FLEE_FAIL" => ["FLEE_FAIL","WAIT(FIXED)","8","COORD_RESET"],
"COMMAND_INPUT" => ["BEFORE_MOVE"],
"COMMAND_SELECT" => ["COORD_RESET"],
"GUARD_ATTACK" => ["WAIT(FIXED)","4","FLOAT_STATE","FLOAT_",
"2","FLOAT_2","2","FLOAT_3","2",
"FLOAT_4","2"],
"EVADE_ATTACK" => ["JUMP_AWAY","JUMP_AWAY","WAIT(FIXED)","16",
"COORD_RESET"],
"ENEMY_EVADE_ATTACK" => ["JUMP_AWAY","WAIT(FIXED)","16","COORD_RESET"],
"VICTORY" => ["WAIT(FIXED)","16","RIGHT(FIXED)","VICTORY_JUMP",
"WAIT(FIXED)","Don't Wait","CAT_STATE",
"START_MAGIC_ANIM","TRANSFORM_CANCEL","WAIT(FIXED)","Don't Wait"],
"RESET_POSITION" => ["COORD_RESET"],
#---------------------- "Forced Action" Sequences --------------------------
"ULRIKA_ATTACK_1" => ["2","MOVING_TARGET_LEFT","WAIT(FIXED)",
"START_MAGIC_ANIM","WPN_SWING_UNDER","WPN_RAISED",
"48","RIGHT_DASH_ATTACK","64","FLEE_RESET"],
"4_MAN_ATTACK_1" => ["2","4_MAN_ATTACK_2","WAIT(FIXED)","START_MAGIC_ANIM",
"WPN_SWING_UNDER","WPN_RAISED","90",
"LEFT_DASH_ATTACK","96","FLEE_RESET"],
"4_MAN_ATTACK_2" => ["2","4_MAN_ATTACK_3","WAIT(FIXED)","START_MAGIC_ANIM",
"WPN_SWING_UNDER","WPN_RAISED","60","RIGHT_DASH_ATTACK2","RIGHT_TURN",
"OBJ_ANIM","128","FLEE_RESET"],
"4_MAN_ATTACK_3" => ["2","4_MAN_ATTACK_4","WAIT(FIXED)","START_MAGIC_ANIM",
"WPN_SWING_UNDER","WPN_RAISED","34","LEFT_DASH_ATTACK2","RIGHT_TURN",
"OBJ_ANIM","144","FLEE_RESET"],
"THROW" => ["CLOCKWISE_TURN","4","MOVING_TARGET_FAST","JUMP_AWAY","4",
"WAIT(FIXED)","JUMP_AWAY","WAIT(FIXED)","32"],
#---------------------- Basic Action Oriented ------------------------------
"NORMAL_ATTACK" => ["PREV_MOVING_TARGET","WPN_SWING_V","OBJ_ANIM_WEIGHT",
"12","WPN_SWING_VL","OBJ_ANIM_L","Two Wpn Only","16",
"Can Collapse","FLEE_RESET"],
"ENEMY_UNARMED_ATK" => ["PREV_MOVING_TARGET","WPN_SWING_V","OBJ_ANIM_WEIGHT",
"Can Collapse","FLEE_RESET"],
"SKILL_USE" => ["BEFORE_MOVE","WAIT(FIXED)","START_MAGIC_ANIM",
"WPN_SWING_UNDER","WPN_RAISED","WPN_SWING_V",
"OBJ_ANIM_WEIGHT","Can Collapse","24","COORD_RESET"],
"SKILL_ALL" => ["BEFORE_MOVE","START_MAGIC_ANIM","WPN_SWING_UNDER","WPN_RAISED",
"Process Skill","WPN_SWING_V","OBJ_ANIM","24",
"Process Skill End","Can Collapse","COORD_RESET"],
"ITEM_USE" => ["PREV_MOVING_TARGET","WAIT(FIXED)","24","OBJ_ANIM_WEIGHT",
"Can Collapse","COORD_RESET"],
#------------------------------ Skill Sequences -------------------------------
"MULTI_ATTACK" => ["Afterimage ON","PREV_STEP_ATTACK","WPN_SWING_VL","OBJ_ANIM_WEAPON",
"WAIT(FIXED)","16","OBJ_ANIM_WEAPON","WPN_SWING_UNDER",
"WPN_SWING_OVER","4","JUMP_FIELD_ATTACK","WPN_SWING_VL",
"OBJ_ANIM_WEAPON","WAIT(FIXED)","16","OBJ_ANIM_WEAPON",
"Invert","WPN_SWING_V","WPN_SWING_VL","12","Invert",
"JUMP_FIELD_ATTACK","WPN_SWING_VL","OBJ_ANIM_WEAPON",
"JUMP_AWAY","JUMP_AWAY","WAIT(FIXED)",
"OBJ_ANIM_WEAPON","DASH_ATTACK","WPN_SWING_VL","Can Collapse",
"Afterimage OFF","16","FLEE_RESET"],
"MULTI_ATTACK_RAND" => ["PREV_STEP_ATTACK","WPN_SWING_VL","OBJ_ANIM_WEAPON","WAIT(FIXED)","16",
"PREV_STEP_ATTACK","WPN_SWING_VL","OBJ_ANIM_WEAPON","WAIT(FIXED)","16",
"PREV_STEP_ATTACK","WPN_SWING_VL","OBJ_ANIM_WEAPON","WAIT(FIXED)","16",
"PREV_STEP_ATTACK","WPN_SWING_VL","OBJ_ANIM_WEAPON","Can Collapse","COORD_RESET"],
"RAPID_MULTI_ATTACK" => ["PREV_MOVING_TARGET","WPN_SWING_V","LIGHT_BLOWBACK","OBJ_ANIM_WEAPON",
"PREV_MOVING_TARGET_FAST","WPN_SWING_V","LIGHT_BLOWBACK","WPN_SWING_VL","OBJ_ANIM_WEAPON",
"PREV_MOVING_TARGET_FAST","WPN_SWING_V","LIGHT_BLOWBACK","WPN_SWING_VL","OBJ_ANIM_WEAPON",
"PREV_MOVING_TARGET_FAST","WPN_SWING_V","LIGHT_BLOWBACK","WPN_SWING_VL","OBJ_ANIM_WEAPON",
"PREV_MOVING_TARGET_FAST","WPN_SWING_V","LIGHT_BLOWBACK","WPN_SWING_VL","OBJ_ANIM_WEAPON",
"PREV_MOVING_TARGET_FAST","WPN_SWING_V","LIGHT_BLOWBACK","WPN_SWING_VL","OBJ_ANIM_WEAPON",
"Can Collapse","12","COORD_RESET"],
"2-MAN_ATTACK" => ["2_MAN_ATK_COND","TWO_UNIFIED_TARGETS","ULRIKA_ATTACK",
"MOVING_TARGET_RIGHT","WAIT(FIXED)","START_MAGIC_ANIM","WPN_SWING_UNDER",
"WPN_RAISED","48","KILL_HIT_ANIM","LEFT_DASH_ATTACK","64","OBJ_ANIM",
"Can Collapse","FLEE_RESET","2_MAN_TECH_REVOKE"],
"2-MAN_ATTACK_ASSIST"=> ["2_MAN_TECH_GRANT"],
"4-MAN_ATTACK" => ["4_MAN_ATK_COND","FOUR_UNIFIED_TARGETS","4_MAN_ATK_1",
"4_MAN_ATK_2","4_MAN_ATK_3","4_MAN_ATTACK_1","WAIT(FIXED)",
"START_MAGIC_ANIM","WPN_SWING_UNDER","WPN_RAISED","90",
"KILL_HIT_ANIM","RIGHT_DASH_ATTACK","64","OBJ_ANIM_WEIGHT",
"Can Collapse","FLEE_RESET","4_MAN_TECH_REVOKE"],
"4-MAN_ATTACK_ASSIST"=> ["4_MAN_TECH_GRANT"],
"THROW_WEAPON" => ["BEFORE_MOVE","WPN_SWING_V","062-Swing01","WAIT(FIXED)",
"START_WEAPON_THROW","12","OBJ_ANIM_WEAPON","Can Collapse",
"END_WEAPON_THROW","COORD_RESET"],
"MULTI_SHOCK" => ["JUMP_TO","JUMP_STOP","Process Skill",
"REAL_TARGET","WPN_SWING_V","IMPACT_1","8",
"OBJ_ANIM_WEAPON","Process Skill End","Can Collapse",
"JUMP_LAND","COORD_RESET"],
"SHOCK_WAVE" => ["REAL_TARGET","WPN_SWING_V","IMPACT_1","20",
"OBJ_ANIM_WEIGHT","Can Collapse"],
"SKILL_90_SEQUENCE" => ["PREV_MOVING_TARGET","OBJ_ANIM","WPN_SWING_V",
"16","LINK_SKILL_91","COORD_RESET"],
"SKILL_91_SEQUENCE" => ["FLEE_FAIL","START_MAGIC_ANIM","WPN_SWING_UNDER","WPN_RAISED",
"8","OBJ_ANIM","LINK_SKILL_92","COORD_RESET"],
"CUT_IN" => ["WAIT(FIXED)","START_MAGIC_ANIM","CUT_IN_START",
"75","CUT_IN_END","8","PREV_MOVING_TARGET",
"WPN_SWING_V","OBJ_ANIM_WEIGHT","Can Collapse",
"Clear image","FLEE_RESET"],
"STOMP" => ["JUMP_TO_TARGET","HIT_ANIM","DROP_DOWN","JUMP_AWAY",
"TRAMPLE","HIT_ANIM","DROP_DOWN","JUMP_AWAY",
"TRAMPLE","OBJ_ANIM","DROP_DOWN","JUMP_AWAY",
"JUMP_AWAY","Can Collapse","WAIT(FIXED)","8","FLEE_RESET"],
"ALL_ATTACK_1" => ["BEFORE_MOVE","WAIT(FIXED)","START_MAGIC_ANIM","WPN_SWING_UNDER",
"WPN_RAISED","STAND_CAST","WPN_SWING_V","48",
"OBJ_ANIM_WEIGHT","Can Collapse","COORD_RESET"],
"TRANSFORM_CAT" => ["JUMP_TO","WAIT(FIXED)","START_MAGIC_ANIM","32",
"TRANSFORM_CAT","WAIT(FIXED)","CATFORM_GRANT","32","JUMP_AWAY"],
"THROW_FRIEND" => ["ALLY_TO_THROW","MOVING_TARGET","LIFT_ALLY","4",
"062-Swing01","THROW_TARGET","ALLY_FLING",
"THROW_ALLY","WAIT(FIXED)","OBJ_ANIM","COORD_RESET",
"WAIT(FIXED)","32"],
#-------------------------------------------------------------------------------
"End" => ["End"]}
end
#==============================================================================
# ■ Game_Actor
#------------------------------------------------------------------------------
# Actor Basic Action Settings
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● Actor Unarmed Attack Animation Sequence
#--------------------------------------------------------------------------
# when 1 <- Actor ID number
# return "NORMAL_ATTACK" <- Corresponding action sequence name.
def non_weapon
case @actor_id
when 1 # Actor ID
return "NORMAL_ATTACK"
end
# Default action sequence for all unassigned Actor IDs.
return "NORMAL_ATTACK"
end
#--------------------------------------------------------------------------
# ● Actor Wait/Idle Animation
#--------------------------------------------------------------------------
def normal
case @actor_id
when 1
return "WAIT"
end
# Default action sequence for all unassigned Actor IDs.
return "WAIT"
end
#--------------------------------------------------------------------------
# ● Actor Critical (1/4th HP) Animation
#--------------------------------------------------------------------------
def pinch
case @actor_id
when 1
return "WAIT-CRITICAL"
end
# Default action sequence for all unassigned Actor IDs.
return "WAIT-CRITICAL"
end
#--------------------------------------------------------------------------
# ● Actor Guarding Animation
#--------------------------------------------------------------------------
def defence
case @actor_id
when 1
return "GUARD_ATTACK"
end
# Default action sequence for all unassigned Actor IDs.
return "GUARD_ATTACK"
end
#--------------------------------------------------------------------------
# ● Actor Damage Taken Animation
#--------------------------------------------------------------------------
def damage_hit
case @actor_id
when 1
return "DAMAGE"
end
# Default action sequence for all unassigned Actor IDs.
return "DAMAGE"
end
#--------------------------------------------------------------------------
# ● Actor Evasion Animation
#--------------------------------------------------------------------------
def evasion
case @actor_id
when 1
return "EVADE_ATTACK"
end
# Default action sequence for all unassigned Actor IDs.
return "EVADE_ATTACK"
end
#--------------------------------------------------------------------------
# ● Actor Command Input Animation
#--------------------------------------------------------------------------
def command_b
case @actor_id
when 1
return "COMMAND_INPUT"
end
# Default action sequence for all unassigned Actor IDs.
return "COMMAND_INPUT"
end
#--------------------------------------------------------------------------
# ● Actor Command Selected Animation
#--------------------------------------------------------------------------
def command_a
case @actor_id
when 1
return "COMMAND_SELECT"
end
# Default action sequence for all unassigned Actor IDs.
return "COMMAND_SELECT"
end
#--------------------------------------------------------------------------
# ● Actor Flee Success Animation
#--------------------------------------------------------------------------
def run_success
case @actor_id
when 1
return "FLEE"
end
# Default action sequence for all unassigned Actor IDs.
return "FLEE"
end
#--------------------------------------------------------------------------
# ● Actor Flee Failure Animation
#--------------------------------------------------------------------------
def run_ng
case @actor_id
when 1
return "FLEE_FAIL"
end
# Default action sequence for all unassigned Actor IDs.
return "FLEE_FAIL"
end
#--------------------------------------------------------------------------
# ● Actor Victory Animation
#--------------------------------------------------------------------------
def win
case @actor_id
when 1
return "VICTORY"
end
# Default action sequence for all unassigned Actor IDs.
return "VICTORY"
end
#--------------------------------------------------------------------------
# ● Actor Battle Start Animation
#--------------------------------------------------------------------------
def first_action
case @actor_id
when 1
return "BATTLE_START"
end
# Default action sequence for all unassigned Actor IDs.
return "BATTLE_START"
end
#--------------------------------------------------------------------------
# ● Actor Return Action when actions are interuptted/canceled
#--------------------------------------------------------------------------
def recover_action
case @actor_id
when 1
return "RESET_POSITION"
end
# Default action sequence for all unassigned Actor IDs.
return "RESET_POSITION"
end
#--------------------------------------------------------------------------
# ● Actor Shadow
#--------------------------------------------------------------------------
# return "shadow01" <- Image file name in .Graphics\Characters
# return "" <- No shadow used.
def shadow
case @actor_id
when 1
return "shadow00"
end
# Default shadow for all unassigned Actor IDs.
return "shadow00"
end
#--------------------------------------------------------------------------
# ● Actor Shadow Adjustment
#--------------------------------------------------------------------------
# return [ X-Coordinate, Y-Coordinate]
def shadow_plus
case @actor_id
when 1
return [ 0, 4]
end
# Default shadow positioning for all unassigned Actor IDs.
return [ 0, 4]
end
end
#==============================================================================
# ■ Game_Enemy
#------------------------------------------------------------------------------
# Enemy Basic Action Settings
#==============================================================================
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# ● Enemy Unarmed Attack Animation Sequence
#--------------------------------------------------------------------------
# when 1 <- EnemyID#
# return "ENEMY_UNARMED_ATK" <- Corresponding action sequence name.
def base_action
case @enemy_id
when 1
return "ENEMY_UNARMED_ATK"
end
# Default action sequence for all unassigned Enemy IDs.
return "ENEMY_UNARMED_ATK"
end
#--------------------------------------------------------------------------
# ● Enemy Wait/Idle Animation
#--------------------------------------------------------------------------
def normal
case @enemy_id
when 1
return "WAIT"
end
# Default action sequence for all unassigned Enemy IDs.
return "WAIT"
end
#--------------------------------------------------------------------------
# ● Enemy Critical (1/4th HP) Animation
#--------------------------------------------------------------------------
def pinch
case @enemy_id
when 1
return "WAIT"
end
# Default action sequence for all unassigned Enemy IDs.
return "WAIT"
end
#--------------------------------------------------------------------------
# ● Enemy Guarding Animation
#--------------------------------------------------------------------------
def defence
case @enemy_id
when 1
return "GUARD_ATTACK"
end
# Default action sequence for all unassigned Enemy IDs.
return "GUARD_ATTACK"
end
#--------------------------------------------------------------------------
# ● Enemy Damage Taken Animation
#--------------------------------------------------------------------------
def damage_hit
case @enemy_id
when 1
return "DAMAGE"
end
# Default action sequence for all unassigned Enemy IDs.
return "DAMAGE"
end
#--------------------------------------------------------------------------
# ● Enemy Evasion Animation
#--------------------------------------------------------------------------
def evasion
case @enemy_id
when 1
return "ENEMY_EVADE_ATTACK"
end
# Default action sequence for all unassigned Enemy IDs.
return "ENEMY_EVADE_ATTACK"
end
#--------------------------------------------------------------------------
# ● Enemy Flee Animation
#--------------------------------------------------------------------------
def run_success
case @enemy_id
when 1
return "ENEMY_FLEE"
end
# Default action sequence for all unassigned Enemy IDs.
return "ENEMY_FLEE"
end
#--------------------------------------------------------------------------
# ● Enemy Battle Start Animation
#--------------------------------------------------------------------------
def first_action
case @enemy_id
when 1
return "BATTLE_START"
end
# Default action sequence for all unassigned Enemy IDs.
return "BATTLE_START"
end
#--------------------------------------------------------------------------
# ● Enemy Return Action when action is interuptted/discontinued
#--------------------------------------------------------------------------
def recover_action
case @enemy_id
when 1
return "RESET_POSITION"
end
# Default action sequence for all unassigned Enemy IDs.
return "RESET_POSITION"
end
#--------------------------------------------------------------------------
# ● Enemy Shadow
#--------------------------------------------------------------------------
# return "shadow01" <- Image file name in .Graphics\Characters
# return "" <- No shadow used.
def shadow
case @enemy_id
when 1
return "shadow01"
when 30
return ""
end
# Default shadow for all unassigned Enemy IDs.
return "shadow01"
end
#--------------------------------------------------------------------------
# ● Enemy Shadow Adjustment
#--------------------------------------------------------------------------
# return [ X-Coordinate, Y-Coordinate]
def shadow_plus
case @enemy_id
when 1
return [ 0, -8]
end
# Default shadow positioning for all unassigned Enemy IDs.
return [ 0, 0]
end
#--------------------------------------------------------------------------
# ● Enemy Equipped Weapon
#--------------------------------------------------------------------------
# return 0 (Unarmed/No weapon equipped.)
# return 1 (Weapon ID number. (1~999))
def weapon
case @enemy_id
when 1 # Enemy ID
return 0 # Weapon ID
end
# Default weapon for all unassigned Enemy IDs.
return 0
end
#--------------------------------------------------------------------------
# ● Enemy Screen Positioning Adjustment
#--------------------------------------------------------------------------
# return [ 0, 0] <- [X-coordinate、Y-coordinate]
def position_plus
case @enemy_id
when 1
return [0, 0]
end
# Default positioning for all unassigned Enemy IDs.
return [ 0, 0]
end
#--------------------------------------------------------------------------
# ● Enemy Collapse Animation Settings
#--------------------------------------------------------------------------
# return 1 (Enemy sprite stays on screen after death.)
# return 2 (Enemy disappears from the battle like normal.)
# return 3 (Special collapse animation.) <- Good for bosses.
def collapse_type
case @enemy_id
when 1
return 2
when 30
return 3
end
# Default collapse for all unassigned Enemy IDs.
return 2
end
#--------------------------------------------------------------------------
# ● Enemy Multiple Action Settings
#--------------------------------------------------------------------------
# Maximum Actions, Probability, Speed Adjustment
# return [ 2, 100, 100]
#
# Maximum Actions - Maximum number of actions enemy may execute in a turn.
# Probability - % value. Chance for a successive action.
# Speed Adjustment - % value that decreases enemy's speed after
# each successive action.
def action_time
case @enemy_id
when 1
return [ 1, 100, 100]
end
# Default action for all unassigned Enemy IDs.
return [ 1, 100, 100]
end
#--------------------------------------------------------------------------
# ● Enemy Animated Battler Settings
#--------------------------------------------------------------------------
# return true - Enemy battler uses same animation frames as actors.
# return false - Default enemy battler.
# [Settings]
# 1.Enemy animated battler file must be in .Graphics\Characters folder.
# 2.Enemy battler file names must match between .Graphics\Characters and
# .Graphics/Battlers folders.
def anime_on
case @enemy_id
when 1
return false
end
# Default setting for all unassigned Enemy IDs.
return false
end
#--------------------------------------------------------------------------
# ● Enemy Invert Settings
#--------------------------------------------------------------------------
# return false <- Normal
# return true <- Inverts enemy image
def action_mirror
case @enemy_id
when 1
return false
end
# Default setting for all unassigned Enemy IDs.
return false
end
end
#==============================================================================
# ■ module RPG
#------------------------------------------------------------------------------
# State Action Settings
#==============================================================================
class RPG::State
#--------------------------------------------------------------------------
# ● State Affliction Wait Animation Settings
#--------------------------------------------------------------------------
# when 1 <- State ID number
# return "DEAD" <- Action sequence when afflicted by specified state.
def base_action
case @id
when 1 # Incapacitated(HP0). Has the highest priority.
return "DEAD"
when 2,3,4,5,7
return "WAIT-NORMAL"
when 6
return "WAIT-SLEEP"
when 17
return "WAIT-FLOAT"
end
# Default action sequence for all unassigned State IDs.
return "WAIT"
end
#--------------------------------------------------------------------------
# ● State Enhancement Extension Settings
#--------------------------------------------------------------------------
# Note about REFLECT and NULL states:
# An item/skill is considered physical if "Physical Attack" is
# checked under "Options" in your Database. Otherwise, it is magical.
#
# "AUTOLIFE/50" - Automatically revives when Incapacitated.
# Value after "/" is % of MAXHP restored when revived.
# "MAGREFLECT/39" - Reflects magical skills to the original caster.
# Value after "/" is Animation ID when triggered.
# "MAGNULL/39" - Nullify magical skills and effects.
# Value after "/" is Animation ID when triggered.
# "PHYREFLECT/39" - Reflects physical skills to the original caster.
# Value after "/" is Animation ID when triggered.
# "PHYNULL/39" - Nullify physical skills and effects.
# Value after "/" is Animation ID when triggered.
# "COSTABSORB" - Absorbs the MP (or HP) cost of an incoming skill when
# affected. This will not appear as POP Damage. This
# function is similar to Celes' "Runic" from FF6.
# "ZEROTURNLIFT" - State is lifted at the end of turn regardless.
# "EXCEPTENEMY" - Enemies will not use animation sequence assigned
# under State Affliction Wait Animation Settings when
# afflicted. (Actors still will.)
# "NOPOP" - State name will not appear as POP Damage.
# "HIDEICON" - State icon will not appear in the BattleStatus Window.
# "NOSTATEANIME" - State's caster and enemies will not use animation
# sequence assigned under State Affliction Wait Animation
# Settings when afflicted.
# "SLIPDAMAGE" - Apply slip damage. Assign values under Slip Damage Settings.
# "REGENERATION" - Apply regeneration. Assign values under Slip Damage Settings.
# "NONE" - No extension. Used as a default.
def extension
case @id
when 1 # Incapacitated State. Has highest priority.
return ["NOPOP","EXCEPTENEMY"]
when 2 # Poison
return ["SLIPDAMAGE"]
when 18 # 2-Man Tech
return ["ZEROTURNLIFT","HIDEICON"]
when 19 # 4-Man Tech
return ["ZEROTURNLIFT","HIDEICON"]
when 20 # Cat Transformation
return ["HIDEICON","NOSTATEANIME"]
end
# Default extension for unassigned State IDs.
return ["NONE"]
end
#--------------------------------------------------------------------------
# ● Slip Damage Settings
#--------------------------------------------------------------------------
# Also includes regeneration options.
#
# when 1 <- State ID. Slip Damage only applies if "SLIPDAMAGE" is assigned above.
# Multiple settings may be applied. Ex)[["hp",0,5,true],["mp",0,5,true]]
#
# Type, Constant, %, POP?, Allow Death
# return [["hp", 0, 10, true, true]]
#
# Type – "hp" or "mp".
# Constant – Set a constant value to apply each turn.
# Positive values are damage. Negative values are recovery.
# % - Set a percentage value to apply each turn based on MAX HP/MP.
# Positive values are damage. Negative values are recovery.
# POP? - Determines whether or not you want slip damage value to
# appear as POP Damage.
# Allow Death - true: Slip damage can kill.
# false: Slip damage will not kill. (Battler will be left at 1 HP)
def slip_extension
case @id
when 2 # Poison
return [["hp", 0, 10, true, true]]
end
return []
end
end
#==============================================================================
# ■ module RPG
#------------------------------------------------------------------------------
# Weapon Action Settings
#==============================================================================
class RPG::Weapon
#--------------------------------------------------------------------------
# ● Weapon Animation Sequence Settings
#--------------------------------------------------------------------------
# Assigns a specific animation sequence when using a weapon.
#
# when 1 <- Weapon ID number
# return "NORMAL_ATTACK" <- Action sequence for assigned Weapon ID.
def base_action
case @id
when 1
return "NORMAL_ATTACK"
end
# Default action sequence for unassigned Weapon IDs.
return "NORMAL_ATTACK"
end
#--------------------------------------------------------------------------
# ● Weapon Graphic Assignment Settings
#--------------------------------------------------------------------------
# Allows use of a seperate weapon graphic besides the one assigned
# from Iconset.png
#
# return "001-Weapon01" <- Weapon image file name. If "", none is used.
# File must be in the .Graphics\Characters folder
# of your project.
def graphic
case @id
when 1
return ""
end
# Default weapon graphic for unassigned Weapon IDs.
return ""
end
#--------------------------------------------------------------------------
# ● Throwing Weapon Graphic Settings
#--------------------------------------------------------------------------
# Allows use of a seperate throwing weapon graphic besides the one assigned
# from Iconset.png. This is useful for arrows when you don't want the bow
# to be thrown.
#
# return "001-Weapon01" <- Weapon image file name. If "", none is used.
# File must be in the .Graphics\Characters folder
# of your project.
def flying_graphic
case @id
when 1
return ""
end
# Default throwing weapon graphic for unassigned Weapon IDs.
return ""
end
end
#==============================================================================
# ■ module RPG
#------------------------------------------------------------------------------
# Skill Action Settings
#==============================================================================
class RPG::Skill
#--------------------------------------------------------------------------
# ● Skill ID Sequence Assignments
#--------------------------------------------------------------------------
# Assign a skill ID from the Database to execute a defined action sequence.
# Only action sequence names can be assigned. Single-action names cannot
# be directly assigned here.
def base_action
case @id
when 84
return "THROW_WEAPON"
when 85
return "MULTI_ATTACK"
when 86
return "RAPID_MULTI_ATTACK"
when 87
return "MULTI_SHOCK"
when 88
return "SHOCK_WAVE"
when 89
return "MULTI_ATTACK_RAND"
when 90
return "SKILL_90_SEQUENCE"
when 91
return "SKILL_91_SEQUENCE"
when 92
return "NORMAL_ATTACK"
when 93
return "CUT_IN"
when 94
return "STOMP"
when 95
return "ALL_ATTACK_1"
when 96
return "SKILL_ALL"
when 97
return "TRANSFORM_CAT"
when 98
return "2-MAN_ATTACK"
when 99
return "2-MAN_ATTACK_ASSIST"
when 100
return "4-MAN_ATTACK"
when 101
return "4-MAN_ATTACK_ASSIST"
when 102
return "4-MAN_ATTACK_ASSIST"
when 103
return "4-MAN_ATTACK_ASSIST"
when 104
return "THROW_FRIEND"
end
# Default action sequence for unassigned Skill IDs.
return "NORMAL_ATTACK" if self.atk_f > 0
return "SKILL_USE"
end
#--------------------------------------------------------------------------
# ● Skill Enhancement Extension Settings
#--------------------------------------------------------------------------
# Multiple extensions may be applied to a skill ID.
# If "CONSUMEHP" is applied along with any other extensions that deal with
# MP in a forumla, it will be HP instead.
# This script WILL have compatibility issues with KGC_MPCostAlter.
#
# "NOEVADE" -Cannot be evaded regardless.
# "CONSUMEHP" -Consumes HP instead of MP.
# "%COSTMAX" -Consumes % of MAXMP. Example: Actor MAXMP500,
# 10 set in Database, MP50 cost.
# "%COSTNOW" -Consumes % of current MP.
# "IGNOREREFLECT" -Ignores damage reflection states.
# "%DAMAGEMAX/30" -Changes damage formula of skill to:
# damage = ENEMY MAX HP * [Integer] / 100
# [Integer] is the number you apply after "/".
# "%DAMAGENOW/30" -Changes damage formula of skill to:
# damage = ENEMY CURRENT HP * [Integer] / 100
# [Integer] is the number you apply after "/".
# "COSTPOWER" -Changes damage formula of skill to:
# damage = base damage * cost / MAX MP
# The more the skill costs, the more damage it will do.
# "HPNOWPOWER" -Changes damage formula of skill to:
# damage = base damage * CURRENT HP / MAX HP
# The less current HP you have, the less damage.
# "MPNOWPOWER" -Changes damage formula of skill to:
# damage = base damage * CURRENT MP / MAX MP
# The less current MP you have, the less damage.
# "NOHALFMPCOST" -"Half MP Cost" from armor options will not apply.
# "HELPHIDE" -Help window when casting will not appear.
# "TARGETALL" -Will affect all enemies and allies simultaneously.
# "RANDOMTARGET" -Target is chosen at random.
# "OTHERS" -Skill will not affect caster.
# "NOOVERKILL" -Damage will not be applied after the target reaches zero HP.
# "NOFLASH" -Battler will not flash when taking action.
# "FAST" -Battler will be the first to take action in the turn
# "SLOW" -Battler will be the last to take action in the turn
# "SPDAMAGE" -Damage is dealt to the target's SP instead of HP.
# "%DMGABSORB/50" -Part of the damage is converted into HP/SP to the user
# of the skill. Recovered % is the number after "/".
# "NONE" -No extension. Used as a default.
def extension
case @id
when 86
return ["NOOVERKILL"]
when 89
return ["RANDOMTARGET"]
when 94
return ["NOOVERKILL"]
when 96
return ["TARGETALL"]
when 98
return ["NOOVERKILL"]
when 99
return ["HELPHIDE","NOFLASH","FAST"]
when 100
return ["NOOVERKILL"]
when 101
return ["HELPHIDE","NOFLASH","FAST"]
when 102
return ["HELPHIDE","NOFLASH","FAST"]
when 103
return ["HELPHIDE","NOFLASH","FAST"]
end
# Default extensions for unassigned Skill IDs.
return ["NONE"]
end
#--------------------------------------------------------------------------
# ● Skill Throwing Weapon Graphic Settings
#--------------------------------------------------------------------------
# - Allows use of a seperate throwing weapon graphic besides the one assigned
# from Iconset.png. This section is specifically for skills.
#
# return "001-Weapon01" <- Weapon image file name. If "", none is used.
# File must be in the .Graphics\Characters folder
# of your project.
def flying_graphic
case @id
when 1
return ""
end
# Default throwing skill graphic for unassigned Weapon IDs.
return ""
end
end
#==============================================================================
# ■ module RPG
#------------------------------------------------------------------------------
# Item Action Settings
#==============================================================================
class RPG::Item
#--------------------------------------------------------------------------
# ● Item ID Sequence Assignment
#--------------------------------------------------------------------------
def base_action
case @id
when 1
return "ITEM_USE"
end
# Default action sequence for unassigned Item IDs.
return "ITEM_USE"
end
#--------------------------------------------------------------------------
# ● Item Enhancement Extension Settings
#--------------------------------------------------------------------------
# "NOEVADE" -Cannot be evaded regardless.
# "IGNOREREFLECT" -Ignores damage reflection states.
# "HELPHIDE" -Help window when casting will not appear.
# "TARGETALL" -Will affect all enemies and allies simultaneously.
# "RANDOMTARGET" -Target is chosen at random.
# "OTHERS" -Item will not affect caster.
# "NOOVERKILL" -Damage will not be applied after the target reaches zero HP.
# "NOFLASH" -Battler will not flash when taking action.
# "FAST" -Battler will be the first to take action in the turn
# "SLOW" -Battler will be the last to take action in the turn
# "NONE" -No extension. Used as a default.
def extension
case @id
when 1
return ["NONE"]
end
# Default extensions for unassigned Item IDs.
return ["NONE"]
end
end
Classe script
Def initialize
#==============================================================================
# Sideview Battle System XP Configurations Version 2.2xp
#==============================================================================
# These configurations are exclusive for the RPG Maker XP
# These are new configuration constants used so the script can work on RMXP
# These are essential for the script to work well and smoothly
# These were separated from the previous configuration to allow you
# to use the whole configurations already settled for RMVX.
# To avoid conflicts with the script's basic configuration,
# it is recomended to place this script below the other configuration
# Some requested functions present in other script were added here
# as basic functions of the script, to avoid incompatibility.
#==============================================================================
module N01
# Character Animation Repeat
NEW_PATTERN_REPEAT = true
# true = XP style, the frames will follow this sequence: 1, 2, 3, 4, 1, 2, 3...
# false = VX style, the frames will follow this sequence: 1, 2, 3, 2, 1, 2, 3...
# Choose the Damage Alogarithm
DAMAGE_ALGORITHM_TYPE = 0
# 0 = Default XP Style, no changes
# 1 = Default XP Modified, def/mdef reduces damage in % ( 10 def = 1% )
# 2 = Default VX, Vitality replaces Dexterity, the status Attack, P.Def and
# M.Def are totally ignored. (Edit the menus script to remove these status)
# 3 = Customized, an mix of XP e VX alogarithm, Vitality replaces Dexterity
# Names of the status Evasion and Vitality (Vitality is only used if
# DAMAGE_ALGORITHM_TYPE > 1
STAT_EVA = "Esvasion"
STAT_VIT = "Vitality"
# Define here the character's attack power when unarmed.
UNARMED_ATTACK = 10
# Define here the character's attack animation when unarmed.
UNARMED_ANIM = 4
# No animated battler, remaining the same way as the enemies.
# Only let it as true if you want a battle system with completely not animated
# allies.
NO_ANIM_BATTLER = false
# Show status effects balloons on the battles?
BALLOON_ANIM = true
# Show effects' animations on the battles?
STATE_ANIM = true
# EXP division by the number of members on party
EXP_SHARE = true
# Cursor position on the target
# 0 = customizable
# 1 = below the target
# 2 = above the target (adjusts self to the target's height)
CURSOR_TYPE = 2
# Readjust the cursor's position.
CURSOR_POSITION = [ 0, 0]
# Command Window Position
COMMAND_WINDOW_POSITION = [0, 160]
# Show Battler Name window?
BATTLER_NAME_WINDOW = false
# Effects' icons configuration
# Icons must have the same name of effect plus "_st"
# Ex.: Status Venom, must have an icon named "Venom_st"
Icon_max = 5 # Maximum amount of showed icons
Icon_X = 24 # X size of the icon (width)
Icon_Y = 24 # Y size of the icon (height)
X_Adjust = 0 # Readjustment of the X position
Y_Adjust = 0 # Readjustment of the Y position
# State Cycle times
STATE_CYCLE_TIME = 4
# Damage Exhibition configuration
# Red Green Blue
HP_DMG_COLOR = [255, 255, 255] # HP damage color
HP_REC_COLOR = [176, 255, 144] # HP cure color
SP_DMG_COLOR = [144, 96, 255] # SP damage color
SP_REC_COLOR = [255, 144, 255] # SP cure color
CRT_DMG_COLOR = [255, 144, 96] # Critical damage color
CRT_TXT_COLOR = [255, 96, 0] # Critical damage text color
DAMAGE_FONT = "Arial Black" # Damage exhibition font
DMG_F_SIZE = 32 # Size of the damage exhibition font
DMG_DURATION = 40 # Duration, in frames, that the damage stays on screen
CRITIC_TEXT = true # Show text when critical damage is delt?
CRITIC_FLASH = false # Flash effect when critical damage is dealt?
MULTI_POP = false # Style in which the damage is shown true = normal / false = FF styled
POP_MOVE = false # Moviment for damage exhibition?
DMG_SPACE = 12 # Space between the damage digits
DMG_X_MOVE = 2 # X movement of the damage (only if POP_MOVE = true)
DMG_Y_MOVE = 6 # Y movement of the damage
DMG_GRAVITY = 0.98 # Gravity effect, affects on the heeight the damage "jumps"
# Configurations of the Battle Window
STATUS_OPACITY = 160 # Opacity of the Battle Window
MENU_OPACITY = 160 # Opacity of the Item/Skills window
HELP_OPACITY = 160 # Opacity of the Help Window
COMMAND_OPACITY = 160 # Opacity of the Commands Window
HIDE_WINDOW = true # Hide status window when selecting items/skills?
# Name of the sound file used when a dodge occurs.
# This file must be on the Audio/SE folder of your project
EVASION_EFFECT = "015-Jump01"
# Message shown when a flee attempt succeeds
ESCAPE_SUCCESS = "Escaped"
# Message shown when a flee attempt fails
ESCAPE_FAIL = "Failed!"
# Allow Ambushes to occur?
BACK_ATTACK = true
# Define here the Ambush occurance rate
BACK_ATTACK_RATE = 10
# Define the message shown when an Ambush occurs
BACK_ATTACK_ALERT = "Ambushed!"
# Invert the character's position when an ambush occurs?
BACK_ATTACK_MIRROR = true
# Invert the battle background when an Ambush occurs?
BACK_ATTACK_BATTLE_BACK_MIRROR = true
# Here you can configurate the system (itens, skills, switchs) to protect
# the character from Ambushes. The item must be equiped, the skill must be
# learned, and switches must be ON so the Ambush protection works.
# Only one of the 3 need to match the requirements to work.
# In other words, the item can be equiped, but the skill not learned and the
# switch OFF for the item's effect to take place.
# For one item/skill/switch only: = [1]
# For multiple: = [1,2]
# Weapons' ID's
NON_BACK_ATTACK_WEAPONS = []
# Shields' ID's
NON_BACK_ATTACK_ARMOR1 = []
# Helmets' ID's
NON_BACK_ATTACK_ARMOR2 = []
# Armors' ID's
NON_BACK_ATTACK_ARMOR3 = []
# Accesories' ID's
NON_BACK_ATTACK_ARMOR4 = []
# Skills' ID's
NON_BACK_ATTACK_SKILLS = []
# Number of the Switch - when ON, the chance for Ambushes is zero
NO_BACK_ATTACK_SWITCH = []
# Number of the Switch - when ON, the chance for Ambushes is 100%
BACK_ATTACK_SWITCH = []
# Allow Preemptive Attacks to occur?
PREEMPTIVE = true
# Define here the occurance rate of Preemptive Attacks
PREEMPTIVE_RATE = 10
# Define here the message shown when a Preemptive Attack occurs
PREEMPTIVE_ALERT = "Preemptive!"
# Here you can configurate the system (itens, skills, switchs) to increase
# the occurance of Preemptive Attacks. The item must be equiped, the skill must
# be learned, and switches must be ON so the Ambush protection works.
# Only one of the 3 need to match the requirements to work.
# In other words, the item can be equiped, but the skill not learned and the
# switch OFF for the item's effect to take place.
# For one item/skill/switch only: = [1]
# For multiple: = [1,2]
# Weapons' ID's
PREEMPTIVE_WEAPONS = []
# Shields' ID's
PREEMPTIVE_ARMOR1 = []
# Helmets' ID's
PREEMPTIVE_ARMOR2 = []
# Armors' ID's
PREEMPTIVE_ARMOR3 = []
# Accesories' ID's
PREEMPTIVE_ARMOR4 = []
# Skills' ID's
PREEMPTIVE_SKILLS = []
# Number of the Switch - when ON, the chance for Preemptive Attacks is zero
NO_PREEMPTIVE_SWITCH = []
# Number of the Switch - when ON, the chance for Preemptive Attacks is 100%
PREEMPTIVE_SWITCH = []
end
#==============================================================================
# Sideview Battle System Version 2.2xp
#==============================================================================
#==============================================================================
# ■ Sprite_Battler
#==============================================================================
class Sprite_Battler < RPG::Sprite
#--------------------------------------------------------------------------
APPEAR = 3
DISAPPEAR = 4
COLLAPSE = 5
#--------------------------------------------------------------------------
include N01
#--------------------------------------------------------------------------
def initialize(viewport, battler = nil)
super(viewport)
@battler = battler
@battler_visible = false
@effect_type = 0
@effect_duration = 0
@move_x = 0
@move_y = 0
@move_z = 0
@distanse_x = 0
@distanse_y = 0
@moving_x = 0
@moving_y = 0
@move_speed_x = 0
@move_speed_y = 0
@move_speed_plus_x = 0
@move_speed_plus_y = 0
@move_boost_x = 0
@move_boost_y = 0
@jump_time = 0
@jump_time_plus = 0
@jump_up = 0
@jump_down = 0
@jump_size = 0
@float_time = 0
@float_up = 0
@jump_plus = 0
@angle = 0
@angling = 0
@angle_time = 0
@angle_reset = 0
@zoom_x = 0
@zoom_y = 0
@zooming_x = 0
@zooming_y = 0
@zoom_time = 0
@zoom_reset = 0
@target_battler = []
@now_targets = []
@pattern = 0
@pattern_back = false
@wait = 0
@unloop_wait = 0
@action = []
@anime_kind = 0
@anime_speed = 0
@frame = 0
@anime_loop = 0
@anime_end = false
@anime_freeze = false
@anime_freeze_kind = false
@anime_moving = false
@base_width = ANIME_PATTERN
@base_height = ANIME_KIND
@join = false
@width = 0
@height = 0
@picture_time = 0
@individual_targets = []
@balloon_duration = 65
@reverse = false
return @battler_visible = false if @battler == nil
@anime_flug = true if @battler.actor? && !NO_ANIM_BATTLER
@anime_flug = true if !@battler.actor? && @battler.anime_on
@weapon_R = Sprite_Weapon.new(viewport,@battler) if @anime_flug
make_battler
end
#--------------------------------------------------------------------------
def make_battler
@battler.base_position
@battler_hue = @battler.battler_hue
if @anime_flug
@battler_name = @battler.battler_name if !@battler.actor?
@battler_name = @battler.character_name if @battler.actor?
@battler_hue = @battler.character_hue if @battler.actor?
self.mirror = true if !@battler.actor? && @battler.action_mirror
self.mirror = false if !@battler.actor? && @battler.action_mirror and $back_attack
self.bitmap = RPG::Cache.character(@battler_name, @battler_hue) if WALK_ANIME
begin
self.bitmap = RPG::Cache.character(@battler_name + "_1", @battler_hue) unless WALK_ANIME
rescue
self.bitmap = RPG::Cache.character(@battler_name, @battler_hue) unless WALK_ANIME
end
@width = self.bitmap.width / @base_width
@height = self.bitmap.height / @base_height
@sx = @pattern * @width
@sy = @anime_kind * @height
self.src_rect.set(@sx, @sy, @width, @height)
else
@battler_name = @battler.battler_name
self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
@width = bitmap.width
@height = bitmap.height
end
unless @back_attack_flug
if self.mirror && $back_attack
self.mirror = false
elsif $back_attack
self.mirror = true
end
@back_attack_flug = true
end
@battler.reset_coordinate
self.ox = @width / 2
self.oy = @height * 2 / 3
update_move
@move_anime = Sprite_MoveAnime.new(viewport,battler)
@picture = Sprite.new
make_shadow if SHADOW
end
#--------------------------------------------------------------------------
def update_battler_graphic
return if @graphic_change or !WALK_ANIME or @anime_freeze or @battler.dead?
if @battler.actor? and @anime_flug
@battler.base_position
@battler_name = @battler.character_name if @battler.actor?
@battler_hue = @battler.character_hue if @battler.actor?
self.bitmap = RPG::Cache.character(@battler_name, @battler_hue)if WALK_ANIME
begin
self.bitmap = RPG::Cache.character(@battler_name + "_1", @battler_hue) unless WALK_ANIME
rescue
self.bitmap = RPG::Cache.character(@battler_name, @battler_hue) unless WALK_ANIME
end
@width = self.bitmap.width / @base_width
@height = self.bitmap.height / @base_height
@sx = @pattern * @width
@sy = @anime_kind * @height
self.src_rect.set(@sx, @sy, @width, @height)
self.ox = @width / 2
self.oy = @height * 2 / 3
end
unless @back_attack_flug
if self.mirror && $back_attack
self.mirror = false
elsif $back_attack
self.mirror = true
end
@back_attack_flug = true
end
end
#--------------------------------------------------------------------------
def make_shadow
@shadow.dispose if @shadow != nil
@battler_hue = @battler.battler_hue
@shadow = Sprite.new(viewport)
@shadow.z = 200
@shadow.visible = false
@shadow.bitmap = RPG::Cache.character(@battler.shadow, @battler_hue)
@shadow_height = @shadow.bitmap.height
@shadow_plus_x = @battler.shadow_plus[0] - @width / 2
@shadow_plus_y = @battler.shadow_plus[1]
@shadow.zoom_x = @width * 1.0 / @shadow.bitmap.width
update_shadow
@skip_shadow = true
end
#--------------------------------------------------------------------------
def dispose
self.bitmap.dispose if self.bitmap != nil
@weapon_R.dispose if @weapon_R != nil
@move_anime.dispose if @move_anime != nil
@picture.dispose if @picture != nil
@shadow.dispose if @shadow != nil
@balloon.dispose if @balloon != nil
mirage_off
super
end
#--------------------------------------------------------------------------
def damage_action(action)
if action[0] == "absorb"
action[0] = nil
now_hp = @battler.hp
now_sp = @battler.sp
@battler.hp += action[3] if action[2] == "hp"
@battler.sp += action[3] if action[2] == "sp"
@battler.damage = now_hp - @battler.hp if action[2] == "hp"
@battler.damage = now_sp - @battler.sp if action[2] == "sp"
@battler.sp_damage = true if @battler.damage != 0 && action[2] == "sp"
action[2] = false
end
unless @battler.evaded or @battler.missed or action[0] == nil
@battler.animation_id = action[0]
@battler.animation_hit = true
@battler.anime_mirror = action[1]
end
dmg = @battler.damage
dmg = 0 unless dmg.is_a?(Numeric)
start_action(@battler.damage_hit) if dmg > 0 && action[2]
if @battler.evaded or @battler.missed
start_action(@battler.evasion) if action[2]
Audio.se_play("Audio/SE/" + EVASION_EFFECT) if action[2]
end
damage_pop
end
#--------------------------------------------------------------------------
def damage_pop
damage(@battler.damage, @battler.critical, @battler.sp_damage)
@battler.damage = nil
@battler.sp_damage = false
@battler.critical = false
@battler.damage_pop = false
end
#--------------------------------------------------------------------------
def first_action
action = @battler.first_action unless @battler.restriction == 4
action = $data_states[@battler.state_id].base_action if @battler.states[0] != nil && @battler.restriction == 4
start_action(action)
@skip_shadow = false
end
#--------------------------------------------------------------------------
def start_action(kind)
reset
stand_by
@action = ACTION[kind].dup
active = @action.shift
@action.push("End")
@active_action = ANIME[active]
@wait = active.to_i if @active_action == nil
action
end
#--------------------------------------------------------------------------
def start_one_action(kind,back)
reset
stand_by
@action = [back]
@action.push("End")
@active_action = ANIME[kind]
action
end
#--------------------------------------------------------------------------
def next_action
return @wait -= 1 if @wait > 0
return if @anime_end == false
return @unloop_wait -= 1 if @unloop_wait > 0
active = @action.shift
@active_action = ANIME[active]
@wait = active.to_i if @active_action == nil
action
end
#--------------------------------------------------------------------------
def stand_by
@repeat_action = @battler.normal
@repeat_action = @battler.pinch if @battler.hp <= @battler.maxhp / 4
@repeat_action = @battler.defence if @battler.guarding?
unless @battler.state_id == nil
for state in @battler.battler_states.reverse
next if state.extension.include?("NOSTATEANIME")
next if @battler.is_a?(Game_Enemy) && state.extension.include?("EXCEPTENEMY")
@repeat_action = state.base_action
end
end
end
#--------------------------------------------------------------------------
def push_stand_by
action = @battler.normal
action = @battler.pinch if @battler.hp <= @battler.maxhp / 4
action = @battler.defence if @battler.guarding?
for state in @battler.battler_states.reverse
next if state.extension.include?("NOSTATEANIME")
next if @battler.is_a?(Game_Enemy) && state.extension.include?("EXCEPTENEMY")
action = state.base_action
end
@repeat_action = action
@action.delete("End")
act = ACTION[action].dup
for i in 0...act.size
@action.push(act[i])
end
@action.push("End")
@anime_end = true
@angle = self.angle = 0
end
#--------------------------------------------------------------------------
def reset
self.zoom_x = self.zoom_y = 1
self.oy = @height * 2 / 3
@angle = self.angle = 0
@anime_end = true
@non_repeat = false
@anime_freeze = false
@unloop_wait = 0
end
#--------------------------------------------------------------------------
def jump_reset
@battler.jump = @jump_time = @jump_time_plus = @jump_up = @jump_down = 0
@jump_size = @jump_plus = @float_time = @float_up = 0
end
#--------------------------------------------------------------------------
def get_target(target)
return if @battler.individual
@target_battler = target
end
#--------------------------------------------------------------------------
def send_action(action)
@battler.play = 0
@battler.play = action if @battler.active
end
#--------------------------------------------------------------------------
def battler_join
if @battler.exist? && !@battler_visible
return if !@battler.exist? and @battler.is_a?(Game_Enemy)
if @battler.revival && @anime_flug
return @battler.revival = false
elsif @battler.revival && !@anime_flug
@battler.revival = false
return self.visible = true
end
@anime_flug = true if @battler.actor? && !NO_ANIM_BATTLER
@anime_flug = true if !@battler.actor? && @battler.anime_on
make_battler
first_action if !@battler.actor?
end
first_action if @battler.actor? and !@battler_visible
end
#--------------------------------------------------------------------------
def update
super
return self.bitmap = nil && loop_animation(nil) if @battler == nil
battler_join
next_action
update_battler_graphic
update_anime_pattern
update_target
update_force_action
update_move
update_shadow if @shadow != nil
@weapon_R.update if @weapon_action
update_float if @float_time > 0
update_angle if @angle_time > 0
update_zoom if @zoom_time > 0
update_mirage if @mirage_flug
update_picture if @picture_time > 0
update_move_anime if @anime_moving
update_balloon if @balloon_duration <= 64
damage_pop if @battler.damage_pop
setup_new_effect
update_effect
update_battler_bitmap
end
#--------------------------------------------------------------------------
def update_anime_pattern
return @frame -= 1 if @frame != 0
@weapon_R.action if @weapon_action && @weapon_R != nil
if NEW_PATTERN_REPEAT
if @pattern_back
if @anime_loop == 0
if @reverse
@pattern -= 1
@pattern = (@pattern < 0 ? @base_width - 1 : @pattern)
if @pattern == -1
@pattern_back = false
@anime_end = true
end
else
@pattern += 1
@pattern = (@pattern > @base_width - 1 ? 0 : @pattern)
if @pattern == @base_width
@pattern_back = false
@anime_end = true
end
end
else
@anime_end = true
if @anime_loop == 1
@pattern = 0 if !@reverse
@pattern = @base_width - 1 if @reverse
@pattern_back = false
end
end
else
if @reverse
@pattern -= 1
@pattern = (@pattern < 0 ? @base_width - 1 : @pattern)
@pattern_back = true if @pattern == 0
else
@pattern += 1
@pattern = (@pattern > @base_width - 1 ? 0 : @pattern)
@pattern_back = true if @pattern == @base_width - 1
end
end
else
if @pattern_back
if @anime_loop == 0
if @reverse
@pattern += 1
if @pattern == @base_width - 1
@pattern_back = false
@anime_end = true
end
else
@pattern -= 1
if @pattern == 0
@pattern_back = false
@anime_end = true
end
end
else
@anime_end = true
if @anime_loop == 1
@pattern = 0 if !@reverse
@pattern = @base_width - 1 if @reverse
@pattern_back = false
end
end
else
if @reverse
@pattern -= 1
@pattern_back = true if @pattern == 0
else
@pattern += 1
@pattern_back = true if @pattern == @base_width - 1
end
end
end
@frame = @anime_speed
return if @anime_freeze
return unless @anime_flug
@sx = @pattern * @width
@sy = @anime_kind * @height
self.src_rect.set(@sx, @sy, @width, @height)
end
#--------------------------------------------------------------------------
def update_target
return if @battler.force_target == 0
return if @battler.individual
@target_battler = @battler.force_target[1]
@battler.force_target = 0
end
#--------------------------------------------------------------------------
def update_force_action
action = @battler.force_action
return if action == 0
@battler.force_action = 0
return if @battler.active
return collapse_action if action[0] == "N01collapse"
return start_one_action(action[2],action[1]) if action[0] == "SINGLE"
start_action(action[2])
return if action[1] == ""
@action.delete("End")
@action.push(action[1])
@action.push("End")
end
#--------------------------------------------------------------------------
def update_move
if @move_speed_plus_x > 0
@move_x += @moving_x
@battler.move_x = @move_x
@move_speed_plus_x -= 1
elsif @move_speed_x > 0
if @move_boost_x != 0
@moving_x += @move_boost_x
end
@move_x += @moving_x
@battler.move_x = @move_x
@move_speed_x -= 1
end
if @move_speed_plus_y > 0
@move_y += @moving_y
@battler.move_y = @move_y
@move_speed_plus_y -= 1
elsif @move_speed_y > 0
if @move_boost_y != 0
@moving_y += @move_boost_y
end
@move_y += @moving_y
@battler.move_y = @move_y
@move_speed_y -= 1
end
if @jump_up != 0
@jump_plus += @jump_up
@battler.jump = @jump_plus
@jump_up = @jump_up / 2
@jump_time -= 1
if @jump_time == 0 or @jump_up == @jump_sign
@jump_down = @jump_up * 2 * @jump_sign * @jump_sign2
@jump_time_plus += @jump_time * 2
@jump_up = 0
return
end
end
if @jump_down != 0
if @jump_time_plus != 0
@jump_time_plus -= 1
elsif @jump_down != @jump_size
@jump_plus += @jump_down
@battler.jump = @jump_plus
@jump_down = @jump_down * 2
if @jump_down == @jump_size
if @jump_flug
@jump_flug = false
else
@jump_plus += @jump_down
@battler.jump = @jump_plus
@jump_down = @jump_size = 0
end
end
end
end
self.x = @battler.position_x
self.y = @battler.position_y
self.z = @battler.position_z
end
#--------------------------------------------------------------------------
def update_shadow
@shadow.opacity = self.opacity
@shadow.x = self.x + @shadow_plus_x
@shadow.y = self.y + @shadow_plus_y - @jump_plus
end
#--------------------------------------------------------------------------
def update_float
@float_time -= 1
@jump_plus += @float_up
@battler.jump = @jump_plus
end
#--------------------------------------------------------------------------
def update_angle
@angle += @angling
self.angle = @angle
@angle_time -= 1
return @angle = 0 if @angle_time == 0
self.angle = 0 if @angle_reset
end
#--------------------------------------------------------------------------
def update_zoom
@zoom_x += @zooming_x
@zoom_y += @zooming_y
self.zoom_x = @zoom_x
self.zoom_y = @zoom_y
@zoom_time -= 1
return if @zoom_time != 0
@zoom_x = @zoom_y = 0
self.oy = @height
self.zoom_x = self.zoom_y = 1 if @zoom_reset
end
#--------------------------------------------------------------------------
def update_mirage
mirage(@mirage0) if @mirage_count == 1
mirage(@mirage1) if @mirage_count == 3
mirage(@mirage2) if @mirage_count == 5
@mirage_count += 1
@mirage_count = 0 if @mirage_count == 6
end
#--------------------------------------------------------------------------
def update_picture
@picture_time -= 1
@picture.x += @moving_pic_x
@picture.y += @moving_pic_y
end
#--------------------------------------------------------------------------
def update_move_anime
@move_anime.update
@anime_moving = false if @move_anime.finish?
@move_anime.action_reset if @move_anime.finish?
end
#--------------------------------------------------------------------------
def setup_new_effect
if @battler.blink
blink_on
else
blink_off
end
if @battler.white_flash
whiten
@battler.white_flash = false
end
effects_update
if not @battler_visible and @battler.exist?
@effect_type = APPEAR
@effect_duration = 16
@battler_visible = true
end
if @battler_visible and @battler.hidden
@effect_type = DISAPPEAR
@effect_duration = 32
@battler_visible = false
end
if @battler.collapse
@effect_type = COLLAPSE
@effect_duration = 48
@battler.collapse = false
@battler_visible = false
end
if @battler_visible && @battler.animation_id != 0
animation = $data_animations[@battler.animation_id]
@battler.animation_hit = true unless @battler.evaded or @battler.missed
animation(animation, @battler.animation_hit)
if @active_battler.is_a?(Game_Enemy)
if @battler.actor? and @battler.anime_mirror
@battler.anime_mirror = false
elsif @battler.actor? and !@battler.anime_mirror
@battler.anime_mirror = true
end
end
animation_mirror(@battler.anime_mirror)
@battler.animation_id = 0
@battler.anime_mirror = false
end
end
#--------------------------------------------------------------------------
def effects_update
if @battler.damage == nil and @battler.state_animation_id != @state_animation_id and STATE_ANIM and @battler_visible
@state_animation_id = @battler.state_animation_id == nil ? 0 : @battler.state_animation_id
loop_animation($data_animations[@state_animation_id])
end
end
#--------------------------------------------------------------------------
def update_effect
if @effect_duration > 0
@effect_duration -= 1
case @effect_type
when APPEAR
update_appear
when DISAPPEAR
update_disappear
when COLLAPSE
update_collapse
end
end
end
#--------------------------------------------------------------------------
def update_whiten
self.blend_type = 0
self.color.set(255, 255, 255, 128)
self.opacity = 255
self.color.alpha = 128 - (16 - @effect_duration) * 10
end
#--------------------------------------------------------------------------
def update_appear
self.blend_type = 0
self.color.set(0, 0, 0, 0)
self.opacity = (16 - @effect_duration) * 16
end
#--------------------------------------------------------------------------
def update_disappear
self.blend_type = 0
self.color.set(0, 0, 0, 0)
self.opacity = 256 - (32 - @effect_duration) * 10
end
#--------------------------------------------------------------------------
def update_collapse
normal_collapse if @collapse_type == 2
boss_collapse if @collapse_type == 3
end
#--------------------------------------------------------------------------
def update_balloon
@balloon_duration -= 1 if @balloon_duration > 0 && !@balloon_back
@balloon_duration += 1 if @balloon_back
if @balloon_duration == 64
@balloon_back = false
@balloon.visible = false
elsif @balloon_duration == 0
@balloon.visible = false if @balloon_loop == 0
@balloon_back = true if @balloon_loop == 1
end
@balloon.x = self.x
@balloon.y = self.y
@balloon.z = self.y
@balloon.opacity = self.opacity
sx = 7 * 32 if @balloon_duration < 12
sx = (7 - (@balloon_duration - 12) / 8) * 32 unless @balloon_duration < 12
@balloon.src_rect.set(sx, @balloon_id * 32, 32, 32)
@balloon.visible = false if @battler.dead?
end
#--------------------------------------------------------------------------
def update_battler_bitmap
return if @graphic_change
return if @battler.actor?
if @battler.battler_name != @battler_name or @battler.battler_hue != @battler_hue
@battler_name = @battler.battler_name
@battler_hue = @battler.battler_hue
make_battler
self.opacity = 0 if @battler.dead? or @battler.hidden
end
end
#--------------------------------------------------------------------------
def action
return if @active_action == nil
action = @active_action[0]
return mirroring if action == "Invert"
return angling if action == "angle"
return zooming if action == "zoom"
return mirage_on if action == "Afterimage ON"
return mirage_off if action == "Afterimage OFF"
return picture if action == "pic"
return @picture.visible = false && @picture_time = 0 if action == "Clear image"
return graphics_change if action == "change"
return battle_anime if action == "anime"
return balloon_anime if action == "balloon"
return sound if action == "sound"
return $game_switches[@active_action[1]] = @active_action[2] if action == "switch"
return variable if action == "variable"
return two_swords if action == "Two Wpn Only"
return non_two_swords if action == "One Wpn Only"
return necessary if action == "nece"
return derivating if action == "der"
return individual_action if action == "Process Skill"
return individual_action_end if action == "Process Skill End"
return non_repeat if action == "Don't Wait"
return @battler.change_base_position(self.x, self.y) if action == "Start Pos Change"
return @battler.base_position if action == "Start Pos Return"
return change_target if action == "target"
return send_action(action) if action == "Can Collapse"
return send_action(action) if action == "Cancel Action"
return state_on if action == "sta+"
return state_off if action == "sta-"
return Graphics.frame_rate = @active_action[1] if action == "fps"
return floating if action == "float"
return eval(@active_action[1]) if action == "script"
return force_action if @active_action.size == 4
return reseting if @active_action.size == 5
return moving if @active_action.size == 7
return battler_anime if @active_action.size == 9
return moving_anime if @active_action.size == 11
return anime_finish if action == "End"
end
#--------------------------------------------------------------------------
def mirroring
if self.mirror
self.mirror = false
@weapon_R.mirroring if @anime_flug
else
self.mirror = true
@weapon_R.mirroring if @anime_flug
end
end
#--------------------------------------------------------------------------
def angling
jump_reset
@angle_time = @active_action[1]
start_angle = @active_action[2]
end_angle = @active_action[3]
@angle_reset = @active_action[4]
start_angle *= -1 if $back_attack
end_angle *= -1 if $back_attack
start_angle *= -1 if @battler.is_a?(Game_Enemy)
end_angle *= -1 if @battler.is_a?(Game_Enemy)
if @angle_time <= 0
self.angle = end_angle
return @angle_time = 0
end
@angling = (end_angle - start_angle) / @angle_time
@angle = (end_angle - start_angle) % @angle_time + start_angle
end
#--------------------------------------------------------------------------
def zooming
jump_reset
@zoom_time = @active_action[1]
zoom_x = @active_action[2] - 1
zoom_y = @active_action[3] - 1
@zoom_reset = @active_action[4]
@zoom_x = @zoom_y = 1
return @zoom_time = 0 if @zoom_time <= 0
@zooming_x = zoom_x / @zoom_time
@zooming_y = zoom_y / @zoom_time
end
#--------------------------------------------------------------------------
def mirage_on
return if @battler.dead?
@mirage0 = Sprite.new(self.viewport)
@mirage1 = Sprite.new(self.viewport)
@mirage2 = Sprite.new(self.viewport)
@mirage_flug = true
@mirage_count = 0
end
#--------------------------------------------------------------------------
def mirage(body)
body.bitmap = self.bitmap.dup
body.x = self.x
body.y = self.y
body.ox = self.ox
body.oy = self.oy
body.z = self.z
body.mirror = self.mirror
body.angle = @angle
body.opacity = 160
body.zoom_x = self.zoom_x
body.zoom_y = self.zoom_y
body.src_rect.set(@sx, @sy, @width, @height) if @anime_flug
body.src_rect.set(0, 0, @width, @height) unless @anime_flug
end
#--------------------------------------------------------------------------
def mirage_off
@mirage_flug = false
@mirage0.dispose if @mirage0 != nil
@mirage1.dispose if @mirage1 != nil
@mirage2.dispose if @mirage2 != nil
end
#--------------------------------------------------------------------------
def picture
pic_x = @active_action[1]
pic_y = @active_action[2]
pic_end_x = @active_action[3]
pic_end_y = @active_action[4]
@picture_time = @active_action[5]
@moving_pic_x = (pic_end_x - pic_x)/ @picture_time
@moving_pic_y = (pic_end_y - pic_y)/ @picture_time
plus_x = (pic_end_x - pic_x)% @picture_time
plus_y = (pic_end_y - pic_y)% @picture_time
@picture.bitmap = RPG::Cache.picture(@active_action[7])
@picture.x = pic_x + plus_x
@picture.y = pic_y + plus_y
@picture.z = 1
@picture.z = 1900
@picture.z = 3000 if @active_action[6]
@picture.visible = true
end
#--------------------------------------------------------------------------
def graphics_change
return if @battler.is_a?(Game_Enemy)
@battler_name = @active_action[2]
@bitmap = RPG::Cache.character(@battler_name , @battler_hue) if WALK_ANIME
@bitmap = RPG::Cache.character(@battler_name + "_1", @battler_hue) unless WALK_ANIME
@width = @bitmap.width / @base_width
@height = @bitmap.height / @base_height
@battler.graphic_change(@active_action[2]) unless @active_action[1]
@graphic_change = true
end
#--------------------------------------------------------------------------
def battle_anime
return if @active_action[5] && !@battler.actor?
return if @active_action[5] && @battler.weapons[1] == nil
if @battler.actor?
return if !@active_action[5] && @battler.weapons[0] == nil && @battler.weapons[1] != nil
end
anime_id = @active_action[1]
if $back_attack
mirror = true if @active_action[3] == false
mirror = false if @active_action[3]
end
if anime_id < 0
if @battler.current_action.kind == 1 && anime_id != -2
anime_id = $data_skills[@battler.current_action.skill_id].animation2_id
elsif @battler.current_action.kind == 2 && anime_id != -2
anime_id = $data_items[@battler.current_action.item_id].animation2_id
else
anime_id = NO_WEAPON
if @battler.actor?
weapon_id = @battler.weapon_id
anime_id = UNARMED_ANIM
anime_id = battler.weapons[0].animation2_id if battler.weapons[0] != nil
anime_id = battler.weapons[1].animation2_id if @active_action[5]
else
weapon_id = @battler.weapon
anime_id = $data_weapons[weapon_id].animation2_id if weapon_id != 0
end
end
@wait = $data_animations[anime_id].frame_max if $data_animations[anime_id] != nil && @active_action[4]
waitflug = true
damage_action = [anime_id, mirror, true]
return @battler.play = ["OBJ_ANIM",damage_action] if @battler.active
end
if @active_action[2] == 0 && $data_animations[anime_id] != nil
@battler.animation_id = anime_id
@battler.animation_hit = true
@battler.anime_mirror = mirror
elsif $data_animations[anime_id] != nil
for target in @target_battler
target.animation_id = anime_id
target.anime_mirror = mirror
end
end
@wait = $data_animations[anime_id].frame_max if $data_animations[anime_id] != nil && @active_action[4] && !waitflug
end
#--------------------------------------------------------------------------
def sound
pitch = @active_action[2]
vol = @active_action[3]
name = @active_action[4]
case @active_action[1]
when "se"
Audio.se_play("Audio/SE/" + name, vol, pitch)
when "bgm"
if @active_action[4] == ""
now_bgm = RPG::BGM.last
name = now_bgm.name
end
Audio.bgm_play("Audio/BGM/" + name, vol, pitch)
when "bgs"
if @active_action[4] == ""
now_bgs = RPG::BGS.last
name = now_bgs.name
end
Audio.bgs_play("Audio/BGS/" + name, vol, pitch)
end
end
#--------------------------------------------------------------------------
def balloon_anime
return if self.opacity == 0
if @balloon == nil
@balloon = Sprite.new
@balloon.bitmap = RPG::Cache.picture("Balloon")
@balloon.ox = @width / 16
@balloon.oy = 320 / 10 + @height / 3
end
@balloon_id = @active_action[1]
@balloon_loop = @active_action[2]
@balloon_duration = 64
@balloon_back = false
update_balloon
@balloon.visible = true
@balloon.visible = false unless BALLOON_ANIM
end
#--------------------------------------------------------------------------
def variable
operand = @active_action[3]
case @active_action[2]
when 0
$game_variables[@active_action[1]] = operand
when 1
$game_variables[@active_action[1]] += operand
when 2
$game_variables[@active_action[1]] -= operand
when 3
$game_variables[@active_action[1]] *= operand
when 4
$game_variables[@active_action[1]] /= operand
when 5
$game_variables[@active_action[1]] %= operand
end
end
#--------------------------------------------------------------------------
def two_swords
return @action.shift unless @battler.actor?
return @action.shift if @battler.weapons[1] == nil
active = @action.shift
@active_action = ANIME[active]
@wait = active.to_i if @active_action == nil
action
end
#--------------------------------------------------------------------------
def non_two_swords
return unless @battler.actor?
return @action.shift if @battler.weapons[1] != nil
active = @action.shift
@active_action = ANIME[active]
@wait = active.to_i if @active_action == nil
action
end
#--------------------------------------------------------------------------
def necessary
nece1 = @active_action[3]
nece2 = @active_action[4]
case @active_action[1]
when 0
target = [$game_party.actors[@battler.index]] if @battler.actor?
target = [$game_troop.enemies[@battler.index]] if @battler.is_a?(Game_Enemy)
when 1
target = @target_battler
when 2
target = $game_troop.enemies
when 3
target = $game_party.actors
end
return start_action(@battler.recover_action) if target.size == 0
case @active_action[2]
when 0
state_on = true if nece2 > 0
state_member = nece2.abs
if nece2 == 0
state_member = $game_party.actors.size if @battler.actor?
state_member = $game_troop.enemies.size if @battler.is_a?(Game_Enemy)
end
for member in target
state_member -= 1 if member.state?(nece1)
end
if state_member == 0 && state_on
return
elsif state_member == nece2.abs
return if state_on == nil
end
when 1
num_over = true if nece2 > 0
num = 0
for member in target
case nece1
when 0
num += member.hp
when 1
num += member.mp
when 2
num += member.atk
when 3
num += member.dex
when 4
num += member.agi
when 5
num += member.int
end
end
num = num / target.size
if num > nece2.abs && num_over
return
elsif num < nece2.abs
return if num_over == nil
end
when 2
if $game_switches[nece1]
return if nece2
else
return unless nece2
end
when 3
if nece2 > 0
return if $game_variables[nece1] > nece2
else
return unless $game_variables[nece1] > nece2.abs
end
when 4
skill_member = nece2.abs
for member in target
skill_member -= 1 if member.skill_learn?(nece1)
return if skill_member == 0
end
end
return @action = ["End"] if @non_repeat
action = @battler.recover_action
action = @battler.defence if @battler.guarding?
return start_action(action)
end
#--------------------------------------------------------------------------
def derivating
return unless @active_action[2] && !@battler.skill_learn?(@active_action[3])
return if rand(100) > @active_action[1]
@battler.derivation = @active_action[3]
@action = ["End"]
end
#--------------------------------------------------------------------------
def individual_action
@battler.individual = true
@individual_act = @action.dup
send_action(["Individual"])
@individual_targets = @target_battler.dup
@target_battler = [@individual_targets.shift]
end
#--------------------------------------------------------------------------
def individual_action_end
return @battler.individual = false if @individual_targets.size == 0
@action = @individual_act.dup
@target_battler = [@individual_targets.shift]
end
#--------------------------------------------------------------------------
def non_repeat
@repeat_action = []
@non_repeat = true
anime_finish
end
#--------------------------------------------------------------------------
def change_target
return @target_battler = @now_targets.dup if @active_action[2] == 3
target = [@battler] if @active_action[2] == 0
target = @target_battler.dup if @active_action[2] != 0
if @active_action[2] == 2
@now_targets = @target_battler.dup
@target_battler = []
end
if @active_action[1] >= 1000
members = $game_party.actors if @battler.actor?
members = $game_troop.enemies unless @battler.actor?
index = @active_action[1] - 1000
if index < members.size
if members[index].exist? && @battler.index != index
members[index].force_target = ["N01target_change", target]
@target_battler = [members[index]] if @active_action[2] == 2
change = true
else
for member in members
next if @battler.index == member.index
next unless member.exist?
member.force_target = ["N01target_change", target]
@target_battler = [member] if @active_action[2] == 2
break change = true
end
end
end
elsif @active_action[1] > 0
for member in $game_party.actors + $game_troop.enemies
if member.state?(@active_action[1])
member.force_target = ["N01target_change", target]
@target_battler.push(member) if @active_action[2] == 2
change = true
end
end
elsif @active_action[1] < 0
skill_id = @active_action[1].abs
for actor in $game_party.actors
if actor.skill_learn?(skill_id)
actor.force_target = ["N01target_change", target]
@target_battler.push(target) if @active_action[2] == 2
change = true
end
end
else
for member in @target_battler
member.force_target = ["N01target_change", target]
@target_battler.push(member) if @active_action[2] == 2
change = true
end
end
return if change
return @action = ["End"] if @non_repeat
return start_action(@battler.recover_action)
end
#--------------------------------------------------------------------------
def state_on
state_id = @active_action[2]
case @active_action[1]
when 0
@battler.add_state(state_id)
when 1
if @target_battler != nil
for target in @target_battler
target.add_state(state_id)
end
end
when 2
for target in $game_troop.enemies
target.add_state(state_id)
end
when 3
for target in $game_party.actors
target.add_state(state_id)
end
when 4
for target in $game_party.actors
if target.index != @battler.index
target.add_state(state_id)
end
end
end
start_action(@battler.recover_action) unless @battler.movable?
end
#--------------------------------------------------------------------------
def state_off
state_id = @active_action[2]
case @active_action[1]
when 0
@battler.remove_state(state_id)
when 1
if @target_battler != nil
for target in @target_battler
target.remove_state(state_id)
end
end
when 2
for target in $game_troop.enemies
target.remove_state(state_id)
end
when 3
for target in $game_party.actors
target.remove_state(state_id)
end
when 4
for target in $game_party.actors
if target.index != @battler.index
target.remove_state(state_id)
end
end
end
end
#--------------------------------------------------------------------------
def floating
jump_reset
@jump_plus = @active_action[1]
float_end = @active_action[2]
@float_time = @active_action[3]
@float_up = (float_end - @jump_plus)/ @float_time
@wait = @float_time
if @anime_flug
move_anime = ANIME[@active_action[4]]
if move_anime != nil
@active_action = move_anime
battler_anime
@anime_end = true
end
end
@battler.jump = @jump_plus
end
#--------------------------------------------------------------------------
def force_action
kind = @active_action[0]
rebirth = @active_action[2]
play = @active_action[3]
action = [kind,rebirth,play]
if @active_action[1] >= 1000
members = $game_party.actors if @battler.actor?
members = $game_troop.enemies unless @battler.actor?
index = @active_action[1] - 1000
if index < members.size
if members[index].exist? && @battler.index != index
return members[index].force_action = action
else
for target in members
next if @battler.index == target.index
next unless target.exist?
force = true
break target.force_action = action
end
end
end
return if force
return @action = ["End"] if @non_repeat
return start_action(@battler.recover_action)
elsif @active_action[1] == 0
for target in @target_battler
target.force_action = action if target != nil
end
elsif @active_action[1] > 0
for target in $game_party.actors + $game_troop.enemies
target.force_action = action if target.state?(@active_action[1])
end
elsif @active_action[1] < 0
return if @battler.is_a?(Game_Enemy)
for actor in $game_party.actors
unless actor.id == @battler.id
actor.force_action = action if actor.skill_id_learn?(@active_action[1].abs)
end
end
end
end
#--------------------------------------------------------------------------
def reseting
jump_reset
self.angle = 0
@distanse_x = @move_x * -1
@distanse_y = @move_y * -1
@move_speed_x = @active_action[1]
@move_speed_y = @move_speed_x
@move_boost_x = @active_action[2]
@move_boost_y = @move_boost_x
@jump = @active_action[3]
move_distance
if @anime_flug
move_anime = ANIME[@active_action[4]]
if move_anime != nil
@active_action = move_anime
battler_anime
end
@anime_end = true
end
end
#--------------------------------------------------------------------------
def moving
jump_reset
xx = @active_action[1]
xx *= -1 if $back_attack
case @active_action[0]
when 0
@distanse_x = xx
@distanse_y = @active_action[2]
when 1
if @target_battler == nil
@distanse_x = xx
@distanse_y = @active_action[2]
else
target_x = 0
target_y = 0
time = 0
for i in 0...@target_battler.size
if @target_battler[i] != nil
time += 1
target_x += @target_battler[i].position_x
target_y += @target_battler[i].position_y
end
end
if time == 0
@distanse_x = xx
@distanse_y = @active_action[2]
else
target_x = target_x / time
target_y = target_y / time
@distanse_y = target_y - self.y + @active_action[2]
if @battler.actor?
@distanse_x = target_x - self.x + xx
else
@distanse_x = self.x - target_x + xx
end
end
end
when 2
if @battler.actor?
@distanse_x = xx - self.x
@distanse_x = 640 + xx - self.x if $back_attack
else
@distanse_x = self.x - xx
@distanse_x = self.x - (Graphics.width + xx) if $back_attack
end
@distanse_y = @active_action[2] - self.y
when 3
if @battler.actor?
@distanse_x = xx + @battler.base_position_x - self.x
else
@distanse_x = xx + self.x - @battler.base_position_x
end
@distanse_y = @active_action[2] + @battler.base_position_y - @battler.position_y
end
@move_speed_x = @active_action[3]
@move_speed_y = @active_action[3]
@move_boost_x = @active_action[4]
@move_boost_y = @active_action[4]
@jump = @active_action[5]
@jump_plus = 0
move_distance
if @anime_flug
move_anime = ANIME[@active_action[6]]
if move_anime != nil
@active_action = move_anime
battler_anime
end
@anime_end = true
end
end
#--------------------------------------------------------------------------
def move_distance
if @move_speed_x == 0
@moving_x = 0
@moving_y = 0
else
@moving_x = @distanse_x / @move_speed_x
@moving_y = @distanse_y / @move_speed_y
over_x = @distanse_x % @move_speed_x
over_y = @distanse_y % @move_speed_y
@move_x += over_x
@move_y += over_y
@battler.move_x = @move_x
@battler.move_y = @move_y
@distanse_x -= over_x
@distanse_y -= over_y
end
if @distanse_x == 0
@move_speed_x = 0
end
if @distanse_y == 0
@move_speed_y = 0
end
boost_x = @moving_x
move_x = 0
if @move_boost_x > 0 && @distanse_x != 0
if @distanse_x == 0
@move_boost_x = 0
elsif @distanse_x < 0
@move_boost_x *= -1
end
for i in 0...@move_speed_x
boost_x += @move_boost_x
move_x += boost_x
over_distance = @distanse_x - move_x
if @distanse_x > 0 && over_distance < 0
@move_speed_x = i
break
elsif @distanse_x < 0 && over_distance > 0
@move_speed_x = i
break
end
end
before = over_distance + boost_x
@move_speed_plus_x = (before / @moving_x).abs
@move_x += before % @moving_x
@battler.move_x = @move_x
elsif @move_boost_x < 0 && @distanse_x != 0
if @distanse_x == 0
@move_boost_x = 0
elsif @distanse_x < 0
@move_boost_x *= -1
end
for i in 0...@move_speed_x
boost_x += @move_boost_x
move_x += boost_x
lost_distance = @distanse_x - move_x
before = lost_distance
if @distanse_x > 0 && boost_x < 0
@move_speed_x = i - 1
before = lost_distance + boost_x
break
elsif @distanse_x < 0 && boost_x > 0
@move_speed_x= i - 1
before = lost_distance + boost_x
break
end
end
plus = before / @moving_x
@move_speed_plus_x = plus.abs
@move_x += before % @moving_x
@battler.move_x = @move_x
end
boost_y = @moving_y
move_y = 0
if @move_boost_y > 0 && @distanse_y != 0
if @distanse_y == 0
@move_boost_y = 0
elsif @distanse_y < 0
@move_boost_y *= -1
end
for i in 0...@move_speed_y
boost_y += @move_boost_y
move_y += boost_y
over_distance = @distanse_y - move_y
if @distanse_y > 0 && over_distance < 0
@move_speed_y = i
break
elsif @distanse_y < 0 && over_distance > 0
@move_speed_y = i
break
end
end
before = over_distance + boost_y
@move_speed_plus_y = (before / @moving_y).abs
@move_y += before % @moving_y
@battler.move_y = @move_y
elsif @move_boost_y < 0 && @distanse_y != 0
if @distanse_y == 0
@move_boost_y = 0
elsif @distanse_y < 0
@move_boost_y *= -1
end
for i in 0...@move_speed_y
boost_y += @move_boost_y
move_y += boost_y
lost_distance = @distanse_y - move_y
before = lost_distance
if @distanse_y > 0 && boost_y < 0
@move_speed_y = i
before = lost_distance + boost_y
break
elsif @distanse_y < 0 && boost_y > 0
@move_speed_y = i
before = lost_distance + boost_y
break
end
end
plus = before / @moving_y
@move_speed_plus_y = plus.abs
@move_y += before % @moving_y
@battler.move_y = @move_y
end
x = @move_speed_plus_x + @move_speed_x
y = @move_speed_plus_y + @move_speed_y
if x > y
end_time = x
else
end_time = y
end
@wait = end_time
if @jump != 0
if @wait == 0
@wait = @active_action[3]
end
@jump_time = @wait / 2
@jump_time_plus = @wait % 2
@jump_sign = 0
@jump_sign2 = 0
if @jump < 0
@jump_sign = -1
@jump_sign2 = 1
@jump = @jump * -1
else
@jump_sign = 1
@jump_sign2 = -1
end
@jump_up = 2 ** @jump * @jump_sign
if @jump_time == 0
@jump_up = 0
elsif @jump_time != 1
@jump_size = @jump_up * @jump_sign * @jump_sign2
else
@jump_size = @jump_up * 2 * @jump_sign * @jump_sign2
@jump_flug = true
end
end
end
#--------------------------------------------------------------------------
def battler_anime
@anime_kind = @active_action[1]
@anime_speed = @active_action[2]
@anime_loop = @active_action[3]
@unloop_wait = @active_action[4]
@anime_end = true
@reverse = false
if @weapon_R != nil && @active_action[8] != ""
weapon_kind = ANIME[@active_action[8]]
two_swords_flug = weapon_kind[11]
return if two_swords_flug && !@battler.actor?
return if two_swords_flug && @battler.weapons[1] == nil && @battler.actor?
if @battler.actor? && @battler.weapons[0] == nil && !two_swords_flug
@weapon_R.action_reset
elsif @battler.actor? && @battler.weapons[1] == nil && two_swords_flug
@weapon_R.action_reset
elsif !@battler.actor? && @battler.weapon == 0
@weapon_R.action_reset
else
@weapon_R.action_reset
if @active_action[5] != -1
@weapon_R.freeze(@active_action[5])
end
@weapon_R.weapon_graphics unless two_swords_flug
@weapon_R.weapon_graphics(true) if two_swords_flug
@weapon_R.weapon_action(@active_action[8],@anime_loop)
@weapon_action = true
@weapon_R.action
end
elsif @weapon_R != nil
@weapon_R.action_reset
end
@anime_end = false
if @active_action[5] != -1 && @active_action[5] != -2
@anime_freeze = true
@anime_end = true
elsif @active_action[5] == -2
@anime_freeze = false
@reverse = true
@pattern = @base_width - 1
if @weapon_action && @weapon_R != nil
@weapon_R.action
@weapon_R.update
end
else
@anime_freeze = false
@pattern = 0
if @weapon_action && @weapon_R != nil
@weapon_R.action
@weapon_R.update
end
end
@pattern_back = false
@frame = @anime_speed
@battler.move_z = @active_action[6]
if @shadow != nil
@shadow.visible = true if @active_action[7]
@shadow.visible = false unless @active_action[7]
@shadow.visible = false if @skip_shadow
end
file_name = ""
unless @active_action[0] == 0
file_name = "_" + @active_action[0].to_s
end
return unless @anime_flug
begin
self.bitmap = RPG::Cache.character(@battler_name + file_name, @battler_hue)
rescue
self.bitmap = RPG::Cache.character(@battler_name, @battler_hue)
end
@sx = @pattern * @width
@sy = @anime_kind * @height
@sx = @active_action[5] * @width if @anime_freeze
self.src_rect.set(@sx, @sy, @width, @height)
end
#--------------------------------------------------------------------------
def moving_anime
@move_anime.action_reset if @anime_moving
@anime_moving = true
mirror = false
mirror = true if $back_attack
id = @active_action[1]
target = @active_action[2]
x = y = mem = 0
if target == 0
if @target_battler == nil
x = self.x
y = self.y
else
if @target_battler[0] == nil
x = self.x
y = self.y
else
x = @target_battler[0].position_x
y = @target_battler[0].position_y
end
end
elsif target == 1
if @battler.actor?
for target in $game_troop.enemies
x += target.position_x
y += target.position_y
mem += 1
end
x = x / mem
y = y / mem
else
for target in $game_party.actors
x += target.position_x
y += target.position_y
mem += 1
end
x = x / mem
y = y / mem
end
elsif target == 2
if @battler.actor?
for target in $game_party.actors
x += target.position_x
y += target.position_y
mem += 1
end
x = x / mem
y = y / mem
else
for target in $game_troop.enemies
x += target.position_x
y += target.position_y
mem += 1
end
x = x / mem
y = y / mem
end
else
x = self.x
y = self.y
end
plus_x = @active_action[6]
plus_y = @active_action[7]
plus_x *= -1 if @battler.is_a?(Game_Enemy)
distanse_x = x - self.x - plus_x
distanse_y = y - self.y - plus_y
type = @active_action[3]
speed = @active_action[4]
orbit = @active_action[5]
if @active_action[8] == 0
@move_anime.base_x = self.x + plus_x
@move_anime.base_y = self.y + plus_y
elsif @active_action[8] == 1
@move_anime.base_x = x + plus_x
@move_anime.base_y = y + plus_y
distanse_y = distanse_y * -1
distanse_x = distanse_x * -1
else
@move_anime.base_x = x
@move_anime.base_y = y
distanse_x = distanse_y = 0
end
if @active_action[10] == ""
weapon = ""
elsif @anime_flug != true
weapon = ""
else
if @battler.actor?
battler = $game_party.actors[@battler.index]
weapon_id = battler.weapon_id
else
battler = $game_troop.enemies[@battler.index]
weapon_id = battler.weapon
end
weapon_act = ANIME[@active_action[10]].dup if @active_action[10] != ""
if weapon_id != 0 && weapon_act.size == 3
weapon_file = $data_weapons[weapon_id].flying_graphic
if weapon_file == ""
weapon_name = $data_weapons[weapon_id].graphic
icon_weapon = false
if weapon_name == ""
weapon_name = $data_weapons[weapon_id].icon_name
icon_weapon = true
end
else
icon_weapon = false
weapon_name = weapon_file
end
weapon = @active_action[10]
elsif weapon_act.size == 3
weapon = ""
elsif weapon_act != nil && $data_skills[@active_battler.current_action.skill_id] != nil
icon_weapon = false
weapon_name = $data_skills[@battler.current_action.skill.id].flying_graphic
weapon = @active_action[10]
end
end
@move_anime.z = 1
@move_anime.z = 1000 if @active_action[9]
@move_anime.anime_action(id,mirror,distanse_x,distanse_y,type,speed,orbit,weapon,weapon_name,icon_weapon)
end
#--------------------------------------------------------------------------
def anime_finish
return individual_action_end if @individual_targets.size != 0
send_action(@active_action[0]) if @battler.active
mirage_off if @mirage_flug
start_action(@repeat_action) unless @non_repeat
end
#--------------------------------------------------------------------------
def collapse_action
@non_repeat = true
@effect_type = COLLAPSE
@collapse_type = @battler.collapse_type unless @battler.actor?
@battler_visible = false unless @battler.actor?
@effect_duration = COLLAPSE_WAIT + 32 if @collapse_type == 2
@effect_duration = 360 if @collapse_type == 3
end
#--------------------------------------------------------------------------
def normal_collapse
if @effect_duration == 31
$game_system.se_play($data_system.enemy_collapse_se)
self.blend_type = 1
self.color.set(255, 64, 64, 255)
end
self.opacity = 256 - (48 - @effect_duration) * 6 if @effect_duration <= 31
end
#--------------------------------------------------------------------------
def boss_collapse
if @effect_duration == 320
Audio.se_play("Audio/SE/124-Thunder02", 100, 80)
self.flash(Color.new(255, 255, 255), 60)
viewport.flash(Color.new(255, 255, 255), 20)
end
if @effect_duration == 290
Audio.se_play("Audio/SE/124-Thunder02", 100, 80)
self.flash(Color.new(255, 255, 255), 60)
viewport.flash(Color.new(255, 255, 255), 20)
end
if @effect_duration == 250
Audio.se_play("Audio/SE/049-Explosion02",100, 50)
reset
self.blend_type = 1
self.color.set(255, 128, 128, 128)
end
if @effect_duration < 250
self.src_rect.set(0, @effect_duration - 250, @width, @height - @shadow.bitmap.height / 2)
self.x += 10 if @effect_duration % 2 == 0
self.opacity = @effect_duration - 20
return if @effect_duration < 100
Audio.se_play("Audio/SE/049-Explosion02",100, 50) if @effect_duration % 80 == 0
end
end
end
Classe Script
Def initialize
#==============================================================================
# Sideview Battle System Version 2.2xp
#==============================================================================
#==============================================================================
# ■ Sprite_Battler
#==============================================================================
class Sprite_Battler < RPG::Sprite
#--------------------------------------------------------------------------
APPEAR = 3
DISAPPEAR = 4
COLLAPSE = 5
#--------------------------------------------------------------------------
include N01
#--------------------------------------------------------------------------
def initialize(viewport, battler = nil)
super(viewport)
@battler = battler
@battler_visible = false
@effect_type = 0
@effect_duration = 0
@move_x = 0
@move_y = 0
@move_z = 0
@distanse_x = 0
@distanse_y = 0
@moving_x = 0
@moving_y = 0
@move_speed_x = 0
@move_speed_y = 0
@move_speed_plus_x = 0
@move_speed_plus_y = 0
@move_boost_x = 0
@move_boost_y = 0
@jump_time = 0
@jump_time_plus = 0
@jump_up = 0
@jump_down = 0
@jump_size = 0
@float_time = 0
@float_up = 0
@jump_plus = 0
@angle = 0
@angling = 0
@angle_time = 0
@angle_reset = 0
@zoom_x = 0
@zoom_y = 0
@zooming_x = 0
@zooming_y = 0
@zoom_time = 0
@zoom_reset = 0
@target_battler = []
@now_targets = []
@pattern = 0
@pattern_back = false
@wait = 0
@unloop_wait = 0
@action = []
@anime_kind = 0
@anime_speed = 0
@frame = 0
@anime_loop = 0
@anime_end = false
@anime_freeze = false
@anime_freeze_kind = false
@anime_moving = false
@base_width = ANIME_PATTERN
@base_height = ANIME_KIND
@join = false
@width = 0
@height = 0
@picture_time = 0
@individual_targets = []
@balloon_duration = 65
@reverse = false
return @battler_visible = false if @battler == nil
@anime_flug = true if @battler.actor? && !NO_ANIM_BATTLER
@anime_flug = true if !@battler.actor? && @battler.anime_on
@weapon_R = Sprite_Weapon.new(viewport,@battler) if @anime_flug
make_battler
end
#--------------------------------------------------------------------------
def make_battler
@battler.base_position
@battler_hue = @battler.battler_hue
if @anime_flug
@battler_name = @battler.battler_name if !@battler.actor?
@battler_name = @battler.character_name if @battler.actor?
@battler_hue = @battler.character_hue if @battler.actor?
self.mirror = true if !@battler.actor? && @battler.action_mirror
self.mirror = false if !@battler.actor? && @battler.action_mirror and $back_attack
self.bitmap = RPG::Cache.character(@battler_name, @battler_hue) if WALK_ANIME
begin
self.bitmap = RPG::Cache.character(@battler_name + "_1", @battler_hue) unless WALK_ANIME
rescue
self.bitmap = RPG::Cache.character(@battler_name, @battler_hue) unless WALK_ANIME
end
@width = self.bitmap.width / @base_width
@height = self.bitmap.height / @base_height
@sx = @pattern * @width
@sy = @anime_kind * @height
self.src_rect.set(@sx, @sy, @width, @height)
else
@battler_name = @battler.battler_name
self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
@width = bitmap.width
@height = bitmap.height
end
unless @back_attack_flug
if self.mirror && $back_attack
self.mirror = false
elsif $back_attack
self.mirror = true
end
@back_attack_flug = true
end
@battler.reset_coordinate
self.ox = @width / 2
self.oy = @height * 2 / 3
update_move
@move_anime = Sprite_MoveAnime.new(viewport,battler)
@picture = Sprite.new
make_shadow if SHADOW
end
#--------------------------------------------------------------------------
def update_battler_graphic
return if @graphic_change or !WALK_ANIME or @anime_freeze or @battler.dead?
if @battler.actor? and @anime_flug
@battler.base_position
@battler_name = @battler.character_name if @battler.actor?
@battler_hue = @battler.character_hue if @battler.actor?
self.bitmap = RPG::Cache.character(@battler_name, @battler_hue)if WALK_ANIME
begin
self.bitmap = RPG::Cache.character(@battler_name + "_1", @battler_hue) unless WALK_ANIME
rescue
self.bitmap = RPG::Cache.character(@battler_name, @battler_hue) unless WALK_ANIME
end
@width = self.bitmap.width / @base_width
@height = self.bitmap.height / @base_height
@sx = @pattern * @width
@sy = @anime_kind * @height
self.src_rect.set(@sx, @sy, @width, @height)
self.ox = @width / 2
self.oy = @height * 2 / 3
end
unless @back_attack_flug
if self.mirror && $back_attack
self.mirror = false
elsif $back_attack
self.mirror = true
end
@back_attack_flug = true
end
end
#--------------------------------------------------------------------------
def make_shadow
@shadow.dispose if @shadow != nil
@battler_hue = @battler.battler_hue
@shadow = Sprite.new(viewport)
@shadow.z = 200
@shadow.visible = false
@shadow.bitmap = RPG::Cache.character(@battler.shadow, @battler_hue)
@shadow_height = @shadow.bitmap.height
@shadow_plus_x = @battler.shadow_plus[0] - @width / 2
@shadow_plus_y = @battler.shadow_plus[1]
@shadow.zoom_x = @width * 1.0 / @shadow.bitmap.width
update_shadow
@skip_shadow = true
end
#--------------------------------------------------------------------------
def dispose
self.bitmap.dispose if self.bitmap != nil
@weapon_R.dispose if @weapon_R != nil
@move_anime.dispose if @move_anime != nil
@picture.dispose if @picture != nil
@shadow.dispose if @shadow != nil
@balloon.dispose if @balloon != nil
mirage_off
super
end
#--------------------------------------------------------------------------
def damage_action(action)
if action[0] == "absorb"
action[0] = nil
now_hp = @battler.hp
now_sp = @battler.sp
@battler.hp += action[3] if action[2] == "hp"
@battler.sp += action[3] if action[2] == "sp"
@battler.damage = now_hp - @battler.hp if action[2] == "hp"
@battler.damage = now_sp - @battler.sp if action[2] == "sp"
@battler.sp_damage = true if @battler.damage != 0 && action[2] == "sp"
action[2] = false
end
unless @battler.evaded or @battler.missed or action[0] == nil
@battler.animation_id = action[0]
@battler.animation_hit = true
@battler.anime_mirror = action[1]
end
dmg = @battler.damage
dmg = 0 unless dmg.is_a?(Numeric)
start_action(@battler.damage_hit) if dmg > 0 && action[2]
if @battler.evaded or @battler.missed
start_action(@battler.evasion) if action[2]
Audio.se_play("Audio/SE/" + EVASION_EFFECT) if action[2]
end
damage_pop
end
#--------------------------------------------------------------------------
def damage_pop
damage(@battler.damage, @battler.critical, @battler.sp_damage)
@battler.damage = nil
@battler.sp_damage = false
@battler.critical = false
@battler.damage_pop = false
end
#--------------------------------------------------------------------------
def first_action
action = @battler.first_action unless @battler.restriction == 4
action = $data_states[@battler.state_id].base_action if @battler.states[0] != nil && @battler.restriction == 4
start_action(action)
@skip_shadow = false
end
#--------------------------------------------------------------------------
def start_action(kind)
reset
stand_by
@action = ACTION[kind].dup
active = @action.shift
@action.push("End")
@active_action = ANIME[active]
@wait = active.to_i if @active_action == nil
action
end
#--------------------------------------------------------------------------
def start_one_action(kind,back)
reset
stand_by
@action = [back]
@action.push("End")
@active_action = ANIME[kind]
action
end
#--------------------------------------------------------------------------
def next_action
return @wait -= 1 if @wait > 0
return if @anime_end == false
return @unloop_wait -= 1 if @unloop_wait > 0
active = @action.shift
@active_action = ANIME[active]
@wait = active.to_i if @active_action == nil
action
end
#--------------------------------------------------------------------------
def stand_by
@repeat_action = @battler.normal
@repeat_action = @battler.pinch if @battler.hp <= @battler.maxhp / 4
@repeat_action = @battler.defence if @battler.guarding?
unless @battler.state_id == nil
for state in @battler.battler_states.reverse
next if state.extension.include?("NOSTATEANIME")
next if @battler.is_a?(Game_Enemy) && state.extension.include?("EXCEPTENEMY")
@repeat_action = state.base_action
end
end
end
#--------------------------------------------------------------------------
def push_stand_by
action = @battler.normal
action = @battler.pinch if @battler.hp <= @battler.maxhp / 4
action = @battler.defence if @battler.guarding?
for state in @battler.battler_states.reverse
next if state.extension.include?("NOSTATEANIME")
next if @battler.is_a?(Game_Enemy) && state.extension.include?("EXCEPTENEMY")
action = state.base_action
end
@repeat_action = action
@action.delete("End")
act = ACTION[action].dup
for i in 0...act.size
@action.push(act[i])
end
@action.push("End")
@anime_end = true
@angle = self.angle = 0
end
#--------------------------------------------------------------------------
def reset
self.zoom_x = self.zoom_y = 1
self.oy = @height * 2 / 3
@angle = self.angle = 0
@anime_end = true
@non_repeat = false
@anime_freeze = false
@unloop_wait = 0
end
#--------------------------------------------------------------------------
def jump_reset
@battler.jump = @jump_time = @jump_time_plus = @jump_up = @jump_down = 0
@jump_size = @jump_plus = @float_time = @float_up = 0
end
#--------------------------------------------------------------------------
def get_target(target)
return if @battler.individual
@target_battler = target
end
#--------------------------------------------------------------------------
def send_action(action)
@battler.play = 0
@battler.play = action if @battler.active
end
#--------------------------------------------------------------------------
def battler_join
if @battler.exist? && !@battler_visible
return if !@battler.exist? and @battler.is_a?(Game_Enemy)
if @battler.revival && @anime_flug
return @battler.revival = false
elsif @battler.revival && !@anime_flug
@battler.revival = false
return self.visible = true
end
@anime_flug = true if @battler.actor? && !NO_ANIM_BATTLER
@anime_flug = true if !@battler.actor? && @battler.anime_on
make_battler
first_action if !@battler.actor?
end
first_action if @battler.actor? and !@battler_visible
end
#--------------------------------------------------------------------------
def update
super
return self.bitmap = nil && loop_animation(nil) if @battler == nil
battler_join
next_action
update_battler_graphic
update_anime_pattern
update_target
update_force_action
update_move
update_shadow if @shadow != nil
@weapon_R.update if @weapon_action
update_float if @float_time > 0
update_angle if @angle_time > 0
update_zoom if @zoom_time > 0
update_mirage if @mirage_flug
update_picture if @picture_time > 0
update_move_anime if @anime_moving
update_balloon if @balloon_duration <= 64
damage_pop if @battler.damage_pop
setup_new_effect
update_effect
update_battler_bitmap
end
#--------------------------------------------------------------------------
def update_anime_pattern
return @frame -= 1 if @frame != 0
@weapon_R.action if @weapon_action && @weapon_R != nil
if NEW_PATTERN_REPEAT
if @pattern_back
if @anime_loop == 0
if @reverse
@pattern -= 1
@pattern = (@pattern < 0 ? @base_width - 1 : @pattern)
if @pattern == -1
@pattern_back = false
@anime_end = true
end
else
@pattern += 1
@pattern = (@pattern > @base_width - 1 ? 0 : @pattern)
if @pattern == @base_width
@pattern_back = false
@anime_end = true
end
end
else
@anime_end = true
if @anime_loop == 1
@pattern = 0 if !@reverse
@pattern = @base_width - 1 if @reverse
@pattern_back = false
end
end
else
if @reverse
@pattern -= 1
@pattern = (@pattern < 0 ? @base_width - 1 : @pattern)
@pattern_back = true if @pattern == 0
else
@pattern += 1
@pattern = (@pattern > @base_width - 1 ? 0 : @pattern)
@pattern_back = true if @pattern == @base_width - 1
end
end
else
if @pattern_back
if @anime_loop == 0
if @reverse
@pattern += 1
if @pattern == @base_width - 1
@pattern_back = false
@anime_end = true
end
else
@pattern -= 1
if @pattern == 0
@pattern_back = false
@anime_end = true
end
end
else
@anime_end = true
if @anime_loop == 1
@pattern = 0 if !@reverse
@pattern = @base_width - 1 if @reverse
@pattern_back = false
end
end
else
if @reverse
@pattern -= 1
@pattern_back = true if @pattern == 0
else
@pattern += 1
@pattern_back = true if @pattern == @base_width - 1
end
end
end
@frame = @anime_speed
return if @anime_freeze
return unless @anime_flug
@sx = @pattern * @width
@sy = @anime_kind * @height
self.src_rect.set(@sx, @sy, @width, @height)
end
#--------------------------------------------------------------------------
def update_target
return if @battler.force_target == 0
return if @battler.individual
@target_battler = @battler.force_target[1]
@battler.force_target = 0
end
#--------------------------------------------------------------------------
def update_force_action
action = @battler.force_action
return if action == 0
@battler.force_action = 0
return if @battler.active
return collapse_action if action[0] == "N01collapse"
return start_one_action(action[2],action[1]) if action[0] == "SINGLE"
start_action(action[2])
return if action[1] == ""
@action.delete("End")
@action.push(action[1])
@action.push("End")
end
#--------------------------------------------------------------------------
def update_move
if @move_speed_plus_x > 0
@move_x += @moving_x
@battler.move_x = @move_x
@move_speed_plus_x -= 1
elsif @move_speed_x > 0
if @move_boost_x != 0
@moving_x += @move_boost_x
end
@move_x += @moving_x
@battler.move_x = @move_x
@move_speed_x -= 1
end
if @move_speed_plus_y > 0
@move_y += @moving_y
@battler.move_y = @move_y
@move_speed_plus_y -= 1
elsif @move_speed_y > 0
if @move_boost_y != 0
@moving_y += @move_boost_y
end
@move_y += @moving_y
@battler.move_y = @move_y
@move_speed_y -= 1
end
if @jump_up != 0
@jump_plus += @jump_up
@battler.jump = @jump_plus
@jump_up = @jump_up / 2
@jump_time -= 1
if @jump_time == 0 or @jump_up == @jump_sign
@jump_down = @jump_up * 2 * @jump_sign * @jump_sign2
@jump_time_plus += @jump_time * 2
@jump_up = 0
return
end
end
if @jump_down != 0
if @jump_time_plus != 0
@jump_time_plus -= 1
elsif @jump_down != @jump_size
@jump_plus += @jump_down
@battler.jump = @jump_plus
@jump_down = @jump_down * 2
if @jump_down == @jump_size
if @jump_flug
@jump_flug = false
else
@jump_plus += @jump_down
@battler.jump = @jump_plus
@jump_down = @jump_size = 0
end
end
end
end
self.x = @battler.position_x
self.y = @battler.position_y
self.z = @battler.position_z
end
#--------------------------------------------------------------------------
def update_shadow
@shadow.opacity = self.opacity
@shadow.x = self.x + @shadow_plus_x
@shadow.y = self.y + @shadow_plus_y - @jump_plus
end
#--------------------------------------------------------------------------
def update_float
@float_time -= 1
@jump_plus += @float_up
@battler.jump = @jump_plus
end
#--------------------------------------------------------------------------
def update_angle
@angle += @angling
self.angle = @angle
@angle_time -= 1
return @angle = 0 if @angle_time == 0
self.angle = 0 if @angle_reset
end
#--------------------------------------------------------------------------
def update_zoom
@zoom_x += @zooming_x
@zoom_y += @zooming_y
self.zoom_x = @zoom_x
self.zoom_y = @zoom_y
@zoom_time -= 1
return if @zoom_time != 0
@zoom_x = @zoom_y = 0
self.oy = @height
self.zoom_x = self.zoom_y = 1 if @zoom_reset
end
#--------------------------------------------------------------------------
def update_mirage
mirage(@mirage0) if @mirage_count == 1
mirage(@mirage1) if @mirage_count == 3
mirage(@mirage2) if @mirage_count == 5
@mirage_count += 1
@mirage_count = 0 if @mirage_count == 6
end
#--------------------------------------------------------------------------
def update_picture
@picture_time -= 1
@picture.x += @moving_pic_x
@picture.y += @moving_pic_y
end
#--------------------------------------------------------------------------
def update_move_anime
@move_anime.update
@anime_moving = false if @move_anime.finish?
@move_anime.action_reset if @move_anime.finish?
end
#--------------------------------------------------------------------------
def setup_new_effect
if @battler.blink
blink_on
else
blink_off
end
if @battler.white_flash
whiten
@battler.white_flash = false
end
effects_update
if not @battler_visible and @battler.exist?
@effect_type = APPEAR
@effect_duration = 16
@battler_visible = true
end
if @battler_visible and @battler.hidden
@effect_type = DISAPPEAR
@effect_duration = 32
@battler_visible = false
end
if @battler.collapse
@effect_type = COLLAPSE
@effect_duration = 48
@battler.collapse = false
@battler_visible = false
end
if @battler_visible && @battler.animation_id != 0
animation = $data_animations[@battler.animation_id]
@battler.animation_hit = true unless @battler.evaded or @battler.missed
animation(animation, @battler.animation_hit)
if @active_battler.is_a?(Game_Enemy)
if @battler.actor? and @battler.anime_mirror
@battler.anime_mirror = false
elsif @battler.actor? and !@battler.anime_mirror
@battler.anime_mirror = true
end
end
animation_mirror(@battler.anime_mirror)
@battler.animation_id = 0
@battler.anime_mirror = false
end
end
#--------------------------------------------------------------------------
def effects_update
if @battler.damage == nil and @battler.state_animation_id != @state_animation_id and STATE_ANIM and @battler_visible
@state_animation_id = @battler.state_animation_id == nil ? 0 : @battler.state_animation_id
loop_animation($data_animations[@state_animation_id])
end
end
#--------------------------------------------------------------------------
def update_effect
if @effect_duration > 0
@effect_duration -= 1
case @effect_type
when APPEAR
update_appear
when DISAPPEAR
update_disappear
when COLLAPSE
update_collapse
end
end
end
#--------------------------------------------------------------------------
def update_whiten
self.blend_type = 0
self.color.set(255, 255, 255, 128)
self.opacity = 255
self.color.alpha = 128 - (16 - @effect_duration) * 10
end
#--------------------------------------------------------------------------
def update_appear
self.blend_type = 0
self.color.set(0, 0, 0, 0)
self.opacity = (16 - @effect_duration) * 16
end
#--------------------------------------------------------------------------
def update_disappear
self.blend_type = 0
self.color.set(0, 0, 0, 0)
self.opacity = 256 - (32 - @effect_duration) * 10
end
#--------------------------------------------------------------------------
def update_collapse
normal_collapse if @collapse_type == 2
boss_collapse if @collapse_type == 3
end
#--------------------------------------------------------------------------
def update_balloon
@balloon_duration -= 1 if @balloon_duration > 0 && !@balloon_back
@balloon_duration += 1 if @balloon_back
if @balloon_duration == 64
@balloon_back = false
@balloon.visible = false
elsif @balloon_duration == 0
@balloon.visible = false if @balloon_loop == 0
@balloon_back = true if @balloon_loop == 1
end
@balloon.x = self.x
@balloon.y = self.y
@balloon.z = self.y
@balloon.opacity = self.opacity
sx = 7 * 32 if @balloon_duration < 12
sx = (7 - (@balloon_duration - 12) / 8) * 32 unless @balloon_duration < 12
@balloon.src_rect.set(sx, @balloon_id * 32, 32, 32)
@balloon.visible = false if @battler.dead?
end
#--------------------------------------------------------------------------
def update_battler_bitmap
return if @graphic_change
return if @battler.actor?
if @battler.battler_name != @battler_name or @battler.battler_hue != @battler_hue
@battler_name = @battler.battler_name
@battler_hue = @battler.battler_hue
make_battler
self.opacity = 0 if @battler.dead? or @battler.hidden
end
end
#--------------------------------------------------------------------------
def action
return if @active_action == nil
action = @active_action[0]
return mirroring if action == "Invert"
return angling if action == "angle"
return zooming if action == "zoom"
return mirage_on if action == "Afterimage ON"
return mirage_off if action == "Afterimage OFF"
return picture if action == "pic"
return @picture.visible = false && @picture_time = 0 if action == "Clear image"
return graphics_change if action == "change"
return battle_anime if action == "anime"
return balloon_anime if action == "balloon"
return sound if action == "sound"
return $game_switches[@active_action[1]] = @active_action[2] if action == "switch"
return variable if action == "variable"
return two_swords if action == "Two Wpn Only"
return non_two_swords if action == "One Wpn Only"
return necessary if action == "nece"
return derivating if action == "der"
return individual_action if action == "Process Skill"
return individual_action_end if action == "Process Skill End"
return non_repeat if action == "Don't Wait"
return @battler.change_base_position(self.x, self.y) if action == "Start Pos Change"
return @battler.base_position if action == "Start Pos Return"
return change_target if action == "target"
return send_action(action) if action == "Can Collapse"
return send_action(action) if action == "Cancel Action"
return state_on if action == "sta+"
return state_off if action == "sta-"
return Graphics.frame_rate = @active_action[1] if action == "fps"
return floating if action == "float"
return eval(@active_action[1]) if action == "script"
return force_action if @active_action.size == 4
return reseting if @active_action.size == 5
return moving if @active_action.size == 7
return battler_anime if @active_action.size == 9
return moving_anime if @active_action.size == 11
return anime_finish if action == "End"
end
#--------------------------------------------------------------------------
def mirroring
if self.mirror
self.mirror = false
@weapon_R.mirroring if @anime_flug
else
self.mirror = true
@weapon_R.mirroring if @anime_flug
end
end
#--------------------------------------------------------------------------
def angling
jump_reset
@angle_time = @active_action[1]
start_angle = @active_action[2]
end_angle = @active_action[3]
@angle_reset = @active_action[4]
start_angle *= -1 if $back_attack
end_angle *= -1 if $back_attack
start_angle *= -1 if @battler.is_a?(Game_Enemy)
end_angle *= -1 if @battler.is_a?(Game_Enemy)
if @angle_time <= 0
self.angle = end_angle
return @angle_time = 0
end
@angling = (end_angle - start_angle) / @angle_time
@angle = (end_angle - start_angle) % @angle_time + start_angle
end
#--------------------------------------------------------------------------
def zooming
jump_reset
@zoom_time = @active_action[1]
zoom_x = @active_action[2] - 1
zoom_y = @active_action[3] - 1
@zoom_reset = @active_action[4]
@zoom_x = @zoom_y = 1
return @zoom_time = 0 if @zoom_time <= 0
@zooming_x = zoom_x / @zoom_time
@zooming_y = zoom_y / @zoom_time
end
#--------------------------------------------------------------------------
def mirage_on
return if @battler.dead?
@mirage0 = Sprite.new(self.viewport)
@mirage1 = Sprite.new(self.viewport)
@mirage2 = Sprite.new(self.viewport)
@mirage_flug = true
@mirage_count = 0
end
#--------------------------------------------------------------------------
def mirage(body)
body.bitmap = self.bitmap.dup
body.x = self.x
body.y = self.y
body.ox = self.ox
body.oy = self.oy
body.z = self.z
body.mirror = self.mirror
body.angle = @angle
body.opacity = 160
body.zoom_x = self.zoom_x
body.zoom_y = self.zoom_y
body.src_rect.set(@sx, @sy, @width, @height) if @anime_flug
body.src_rect.set(0, 0, @width, @height) unless @anime_flug
end
#--------------------------------------------------------------------------
def mirage_off
@mirage_flug = false
@mirage0.dispose if @mirage0 != nil
@mirage1.dispose if @mirage1 != nil
@mirage2.dispose if @mirage2 != nil
end
#--------------------------------------------------------------------------
def picture
pic_x = @active_action[1]
pic_y = @active_action[2]
pic_end_x = @active_action[3]
pic_end_y = @active_action[4]
@picture_time = @active_action[5]
@moving_pic_x = (pic_end_x - pic_x)/ @picture_time
@moving_pic_y = (pic_end_y - pic_y)/ @picture_time
plus_x = (pic_end_x - pic_x)% @picture_time
plus_y = (pic_end_y - pic_y)% @picture_time
@picture.bitmap = RPG::Cache.picture(@active_action[7])
@picture.x = pic_x + plus_x
@picture.y = pic_y + plus_y
@picture.z = 1
@picture.z = 1900
@picture.z = 3000 if @active_action[6]
@picture.visible = true
end
#--------------------------------------------------------------------------
def graphics_change
return if @battler.is_a?(Game_Enemy)
@battler_name = @active_action[2]
@bitmap = RPG::Cache.character(@battler_name , @battler_hue) if WALK_ANIME
@bitmap = RPG::Cache.character(@battler_name + "_1", @battler_hue) unless WALK_ANIME
@width = @bitmap.width / @base_width
@height = @bitmap.height / @base_height
@battler.graphic_change(@active_action[2]) unless @active_action[1]
@graphic_change = true
end
#--------------------------------------------------------------------------
def battle_anime
return if @active_action[5] && !@battler.actor?
return if @active_action[5] && @battler.weapons[1] == nil
if @battler.actor?
return if !@active_action[5] && @battler.weapons[0] == nil && @battler.weapons[1] != nil
end
anime_id = @active_action[1]
if $back_attack
mirror = true if @active_action[3] == false
mirror = false if @active_action[3]
end
if anime_id < 0
if @battler.current_action.kind == 1 && anime_id != -2
anime_id = $data_skills[@battler.current_action.skill_id].animation2_id
elsif @battler.current_action.kind == 2 && anime_id != -2
anime_id = $data_items[@battler.current_action.item_id].animation2_id
else
anime_id = NO_WEAPON
if @battler.actor?
weapon_id = @battler.weapon_id
anime_id = UNARMED_ANIM
anime_id = battler.weapons[0].animation2_id if battler.weapons[0] != nil
anime_id = battler.weapons[1].animation2_id if @active_action[5]
else
weapon_id = @battler.weapon
anime_id = $data_weapons[weapon_id].animation2_id if weapon_id != 0
end
end
@wait = $data_animations[anime_id].frame_max if $data_animations[anime_id] != nil && @active_action[4]
waitflug = true
damage_action = [anime_id, mirror, true]
return @battler.play = ["OBJ_ANIM",damage_action] if @battler.active
end
if @active_action[2] == 0 && $data_animations[anime_id] != nil
@battler.animation_id = anime_id
@battler.animation_hit = true
@battler.anime_mirror = mirror
elsif $data_animations[anime_id] != nil
for target in @target_battler
target.animation_id = anime_id
target.anime_mirror = mirror
end
end
@wait = $data_animations[anime_id].frame_max if $data_animations[anime_id] != nil && @active_action[4] && !waitflug
end
#--------------------------------------------------------------------------
def sound
pitch = @active_action[2]
vol = @active_action[3]
name = @active_action[4]
case @active_action[1]
when "se"
Audio.se_play("Audio/SE/" + name, vol, pitch)
when "bgm"
if @active_action[4] == ""
now_bgm = RPG::BGM.last
name = now_bgm.name
end
Audio.bgm_play("Audio/BGM/" + name, vol, pitch)
when "bgs"
if @active_action[4] == ""
now_bgs = RPG::BGS.last
name = now_bgs.name
end
Audio.bgs_play("Audio/BGS/" + name, vol, pitch)
end
end
#--------------------------------------------------------------------------
def balloon_anime
return if self.opacity == 0
if @balloon == nil
@balloon = Sprite.new
@balloon.bitmap = RPG::Cache.picture("Balloon")
@balloon.ox = @width / 16
@balloon.oy = 320 / 10 + @height / 3
end
@balloon_id = @active_action[1]
@balloon_loop = @active_action[2]
@balloon_duration = 64
@balloon_back = false
update_balloon
@balloon.visible = true
@balloon.visible = false unless BALLOON_ANIM
end
#--------------------------------------------------------------------------
def variable
operand = @active_action[3]
case @active_action[2]
when 0
$game_variables[@active_action[1]] = operand
when 1
$game_variables[@active_action[1]] += operand
when 2
$game_variables[@active_action[1]] -= operand
when 3
$game_variables[@active_action[1]] *= operand
when 4
$game_variables[@active_action[1]] /= operand
when 5
$game_variables[@active_action[1]] %= operand
end
end
#--------------------------------------------------------------------------
def two_swords
return @action.shift unless @battler.actor?
return @action.shift if @battler.weapons[1] == nil
active = @action.shift
@active_action = ANIME[active]
@wait = active.to_i if @active_action == nil
action
end
#--------------------------------------------------------------------------
def non_two_swords
return unless @battler.actor?
return @action.shift if @battler.weapons[1] != nil
active = @action.shift
@active_action = ANIME[active]
@wait = active.to_i if @active_action == nil
action
end
#--------------------------------------------------------------------------
def necessary
nece1 = @active_action[3]
nece2 = @active_action[4]
case @active_action[1]
when 0
target = [$game_party.actors[@battler.index]] if @battler.actor?
target = [$game_troop.enemies[@battler.index]] if @battler.is_a?(Game_Enemy)
when 1
target = @target_battler
when 2
target = $game_troop.enemies
when 3
target = $game_party.actors
end
return start_action(@battler.recover_action) if target.size == 0
case @active_action[2]
when 0
state_on = true if nece2 > 0
state_member = nece2.abs
if nece2 == 0
state_member = $game_party.actors.size if @battler.actor?
state_member = $game_troop.enemies.size if @battler.is_a?(Game_Enemy)
end
for member in target
state_member -= 1 if member.state?(nece1)
end
if state_member == 0 && state_on
return
elsif state_member == nece2.abs
return if state_on == nil
end
when 1
num_over = true if nece2 > 0
num = 0
for member in target
case nece1
when 0
num += member.hp
when 1
num += member.mp
when 2
num += member.atk
when 3
num += member.dex
when 4
num += member.agi
when 5
num += member.int
end
end
num = num / target.size
if num > nece2.abs && num_over
return
elsif num < nece2.abs
return if num_over == nil
end
when 2
if $game_switches[nece1]
return if nece2
else
return unless nece2
end
when 3
if nece2 > 0
return if $game_variables[nece1] > nece2
else
return unless $game_variables[nece1] > nece2.abs
end
when 4
skill_member = nece2.abs
for member in target
skill_member -= 1 if member.skill_learn?(nece1)
return if skill_member == 0
end
end
return @action = ["End"] if @non_repeat
action = @battler.recover_action
action = @battler.defence if @battler.guarding?
return start_action(action)
end
#--------------------------------------------------------------------------
def derivating
return unless @active_action[2] && !@battler.skill_learn?(@active_action[3])
return if rand(100) > @active_action[1]
@battler.derivation = @active_action[3]
@action = ["End"]
end
#--------------------------------------------------------------------------
def individual_action
@battler.individual = true
@individual_act = @action.dup
send_action(["Individual"])
@individual_targets = @target_battler.dup
@target_battler = [@individual_targets.shift]
end
#--------------------------------------------------------------------------
def individual_action_end
return @battler.individual = false if @individual_targets.size == 0
@action = @individual_act.dup
@target_battler = [@individual_targets.shift]
end
#--------------------------------------------------------------------------
def non_repeat
@repeat_action = []
@non_repeat = true
anime_finish
end
#--------------------------------------------------------------------------
def change_target
return @target_battler = @now_targets.dup if @active_action[2] == 3
target = [@battler] if @active_action[2] == 0
target = @target_battler.dup if @active_action[2] != 0
if @active_action[2] == 2
@now_targets = @target_battler.dup
@target_battler = []
end
if @active_action[1] >= 1000
members = $game_party.actors if @battler.actor?
members = $game_troop.enemies unless @battler.actor?
index = @active_action[1] - 1000
if index < members.size
if members[index].exist? && @battler.index != index
members[index].force_target = ["N01target_change", target]
@target_battler = [members[index]] if @active_action[2] == 2
change = true
else
for member in members
next if @battler.index == member.index
next unless member.exist?
member.force_target = ["N01target_change", target]
@target_battler = [member] if @active_action[2] == 2
break change = true
end
end
end
elsif @active_action[1] > 0
for member in $game_party.actors + $game_troop.enemies
if member.state?(@active_action[1])
member.force_target = ["N01target_change", target]
@target_battler.push(member) if @active_action[2] == 2
change = true
end
end
elsif @active_action[1] < 0
skill_id = @active_action[1].abs
for actor in $game_party.actors
if actor.skill_learn?(skill_id)
actor.force_target = ["N01target_change", target]
@target_battler.push(target) if @active_action[2] == 2
change = true
end
end
else
for member in @target_battler
member.force_target = ["N01target_change", target]
@target_battler.push(member) if @active_action[2] == 2
change = true
end
end
return if change
return @action = ["End"] if @non_repeat
return start_action(@battler.recover_action)
end
#--------------------------------------------------------------------------
def state_on
state_id = @active_action[2]
case @active_action[1]
when 0
@battler.add_state(state_id)
when 1
if @target_battler != nil
for target in @target_battler
target.add_state(state_id)
end
end
when 2
for target in $game_troop.enemies
target.add_state(state_id)
end
when 3
for target in $game_party.actors
target.add_state(state_id)
end
when 4
for target in $game_party.actors
if target.index != @battler.index
target.add_state(state_id)
end
end
end
start_action(@battler.recover_action) unless @battler.movable?
end
#--------------------------------------------------------------------------
def state_off
state_id = @active_action[2]
case @active_action[1]
when 0
@battler.remove_state(state_id)
when 1
if @target_battler != nil
for target in @target_battler
target.remove_state(state_id)
end
end
when 2
for target in $game_troop.enemies
target.remove_state(state_id)
end
when 3
for target in $game_party.actors
target.remove_state(state_id)
end
when 4
for target in $game_party.actors
if target.index != @battler.index
target.remove_state(state_id)
end
end
end
end
#--------------------------------------------------------------------------
def floating
jump_reset
@jump_plus = @active_action[1]
float_end = @active_action[2]
@float_time = @active_action[3]
@float_up = (float_end - @jump_plus)/ @float_time
@wait = @float_time
if @anime_flug
move_anime = ANIME[@active_action[4]]
if move_anime != nil
@active_action = move_anime
battler_anime
@anime_end = true
end
end
@battler.jump = @jump_plus
end
#--------------------------------------------------------------------------
def force_action
kind = @active_action[0]
rebirth = @active_action[2]
play = @active_action[3]
action = [kind,rebirth,play]
if @active_action[1] >= 1000
members = $game_party.actors if @battler.actor?
members = $game_troop.enemies unless @battler.actor?
index = @active_action[1] - 1000
if index < members.size
if members[index].exist? && @battler.index != index
return members[index].force_action = action
else
for target in members
next if @battler.index == target.index
next unless target.exist?
force = true
break target.force_action = action
end
end
end
return if force
return @action = ["End"] if @non_repeat
return start_action(@battler.recover_action)
elsif @active_action[1] == 0
for target in @target_battler
target.force_action = action if target != nil
end
elsif @active_action[1] > 0
for target in $game_party.actors + $game_troop.enemies
target.force_action = action if target.state?(@active_action[1])
end
elsif @active_action[1] < 0
return if @battler.is_a?(Game_Enemy)
for actor in $game_party.actors
unless actor.id == @battler.id
actor.force_action = action if actor.skill_id_learn?(@active_action[1].abs)
end
end
end
end
#--------------------------------------------------------------------------
def reseting
jump_reset
self.angle = 0
@distanse_x = @move_x * -1
@distanse_y = @move_y * -1
@move_speed_x = @active_action[1]
@move_speed_y = @move_speed_x
@move_boost_x = @active_action[2]
@move_boost_y = @move_boost_x
@jump = @active_action[3]
move_distance
if @anime_flug
move_anime = ANIME[@active_action[4]]
if move_anime != nil
@active_action = move_anime
battler_anime
end
@anime_end = true
end
end
#--------------------------------------------------------------------------
def moving
jump_reset
xx = @active_action[1]
xx *= -1 if $back_attack
case @active_action[0]
when 0
@distanse_x = xx
@distanse_y = @active_action[2]
when 1
if @target_battler == nil
@distanse_x = xx
@distanse_y = @active_action[2]
else
target_x = 0
target_y = 0
time = 0
for i in 0...@target_battler.size
if @target_battler[i] != nil
time += 1
target_x += @target_battler[i].position_x
target_y += @target_battler[i].position_y
end
end
if time == 0
@distanse_x = xx
@distanse_y = @active_action[2]
else
target_x = target_x / time
target_y = target_y / time
@distanse_y = target_y - self.y + @active_action[2]
if @battler.actor?
@distanse_x = target_x - self.x + xx
else
@distanse_x = self.x - target_x + xx
end
end
end
when 2
if @battler.actor?
@distanse_x = xx - self.x
@distanse_x = 640 + xx - self.x if $back_attack
else
@distanse_x = self.x - xx
@distanse_x = self.x - (Graphics.width + xx) if $back_attack
end
@distanse_y = @active_action[2] - self.y
when 3
if @battler.actor?
@distanse_x = xx + @battler.base_position_x - self.x
else
@distanse_x = xx + self.x - @battler.base_position_x
end
@distanse_y = @active_action[2] + @battler.base_position_y - @battler.position_y
end
@move_speed_x = @active_action[3]
@move_speed_y = @active_action[3]
@move_boost_x = @active_action[4]
@move_boost_y = @active_action[4]
@jump = @active_action[5]
@jump_plus = 0
move_distance
if @anime_flug
move_anime = ANIME[@active_action[6]]
if move_anime != nil
@active_action = move_anime
battler_anime
end
@anime_end = true
end
end
#--------------------------------------------------------------------------
def move_distance
if @move_speed_x == 0
@moving_x = 0
@moving_y = 0
else
@moving_x = @distanse_x / @move_speed_x
@moving_y = @distanse_y / @move_speed_y
over_x = @distanse_x % @move_speed_x
over_y = @distanse_y % @move_speed_y
@move_x += over_x
@move_y += over_y
@battler.move_x = @move_x
@battler.move_y = @move_y
@distanse_x -= over_x
@distanse_y -= over_y
end
if @distanse_x == 0
@move_speed_x = 0
end
if @distanse_y == 0
@move_speed_y = 0
end
boost_x = @moving_x
move_x = 0
if @move_boost_x > 0 && @distanse_x != 0
if @distanse_x == 0
@move_boost_x = 0
elsif @distanse_x < 0
@move_boost_x *= -1
end
for i in 0...@move_speed_x
boost_x += @move_boost_x
move_x += boost_x
over_distance = @distanse_x - move_x
if @distanse_x > 0 && over_distance < 0
@move_speed_x = i
break
elsif @distanse_x < 0 && over_distance > 0
@move_speed_x = i
break
end
end
before = over_distance + boost_x
@move_speed_plus_x = (before / @moving_x).abs
@move_x += before % @moving_x
@battler.move_x = @move_x
elsif @move_boost_x < 0 && @distanse_x != 0
if @distanse_x == 0
@move_boost_x = 0
elsif @distanse_x < 0
@move_boost_x *= -1
end
for i in 0...@move_speed_x
boost_x += @move_boost_x
move_x += boost_x
lost_distance = @distanse_x - move_x
before = lost_distance
if @distanse_x > 0 && boost_x < 0
@move_speed_x = i - 1
before = lost_distance + boost_x
break
elsif @distanse_x < 0 && boost_x > 0
@move_speed_x= i - 1
before = lost_distance + boost_x
break
end
end
plus = before / @moving_x
@move_speed_plus_x = plus.abs
@move_x += before % @moving_x
@battler.move_x = @move_x
end
boost_y = @moving_y
move_y = 0
if @move_boost_y > 0 && @distanse_y != 0
if @distanse_y == 0
@move_boost_y = 0
elsif @distanse_y < 0
@move_boost_y *= -1
end
for i in 0...@move_speed_y
boost_y += @move_boost_y
move_y += boost_y
over_distance = @distanse_y - move_y
if @distanse_y > 0 && over_distance < 0
@move_speed_y = i
break
elsif @distanse_y < 0 && over_distance > 0
@move_speed_y = i
break
end
end
before = over_distance + boost_y
@move_speed_plus_y = (before / @moving_y).abs
@move_y += before % @moving_y
@battler.move_y = @move_y
elsif @move_boost_y < 0 && @distanse_y != 0
if @distanse_y == 0
@move_boost_y = 0
elsif @distanse_y < 0
@move_boost_y *= -1
end
for i in 0...@move_speed_y
boost_y += @move_boost_y
move_y += boost_y
lost_distance = @distanse_y - move_y
before = lost_distance
if @distanse_y > 0 && boost_y < 0
@move_speed_y = i
before = lost_distance + boost_y
break
elsif @distanse_y < 0 && boost_y > 0
@move_speed_y = i
before = lost_distance + boost_y
break
end
end
plus = before / @moving_y
@move_speed_plus_y = plus.abs
@move_y += before % @moving_y
@battler.move_y = @move_y
end
x = @move_speed_plus_x + @move_speed_x
y = @move_speed_plus_y + @move_speed_y
if x > y
end_time = x
else
end_time = y
end
@wait = end_time
if @jump != 0
if @wait == 0
@wait = @active_action[3]
end
@jump_time = @wait / 2
@jump_time_plus = @wait % 2
@jump_sign = 0
@jump_sign2 = 0
if @jump < 0
@jump_sign = -1
@jump_sign2 = 1
@jump = @jump * -1
else
@jump_sign = 1
@jump_sign2 = -1
end
@jump_up = 2 ** @jump * @jump_sign
if @jump_time == 0
@jump_up = 0
elsif @jump_time != 1
@jump_size = @jump_up * @jump_sign * @jump_sign2
else
@jump_size = @jump_up * 2 * @jump_sign * @jump_sign2
@jump_flug = true
end
end
end
#--------------------------------------------------------------------------
def battler_anime
@anime_kind = @active_action[1]
@anime_speed = @active_action[2]
@anime_loop = @active_action[3]
@unloop_wait = @active_action[4]
@anime_end = true
@reverse = false
if @weapon_R != nil && @active_action[8] != ""
weapon_kind = ANIME[@active_action[8]]
two_swords_flug = weapon_kind[11]
return if two_swords_flug && !@battler.actor?
return if two_swords_flug && @battler.weapons[1] == nil && @battler.actor?
if @battler.actor? && @battler.weapons[0] == nil && !two_swords_flug
@weapon_R.action_reset
elsif @battler.actor? && @battler.weapons[1] == nil && two_swords_flug
@weapon_R.action_reset
elsif !@battler.actor? && @battler.weapon == 0
@weapon_R.action_reset
else
@weapon_R.action_reset
if @active_action[5] != -1
@weapon_R.freeze(@active_action[5])
end
@weapon_R.weapon_graphics unless two_swords_flug
@weapon_R.weapon_graphics(true) if two_swords_flug
@weapon_R.weapon_action(@active_action[8],@anime_loop)
@weapon_action = true
@weapon_R.action
end
elsif @weapon_R != nil
@weapon_R.action_reset
end
@anime_end = false
if @active_action[5] != -1 && @active_action[5] != -2
@anime_freeze = true
@anime_end = true
elsif @active_action[5] == -2
@anime_freeze = false
@reverse = true
@pattern = @base_width - 1
if @weapon_action && @weapon_R != nil
@weapon_R.action
@weapon_R.update
end
else
@anime_freeze = false
@pattern = 0
if @weapon_action && @weapon_R != nil
@weapon_R.action
@weapon_R.update
end
end
@pattern_back = false
@frame = @anime_speed
@battler.move_z = @active_action[6]
if @shadow != nil
@shadow.visible = true if @active_action[7]
@shadow.visible = false unless @active_action[7]
@shadow.visible = false if @skip_shadow
end
file_name = ""
unless @active_action[0] == 0
file_name = "_" + @active_action[0].to_s
end
return unless @anime_flug
begin
self.bitmap = RPG::Cache.character(@battler_name + file_name, @battler_hue)
rescue
self.bitmap = RPG::Cache.character(@battler_name, @battler_hue)
end
@sx = @pattern * @width
@sy = @anime_kind * @height
@sx = @active_action[5] * @width if @anime_freeze
self.src_rect.set(@sx, @sy, @width, @height)
end
#--------------------------------------------------------------------------
def moving_anime
@move_anime.action_reset if @anime_moving
@anime_moving = true
mirror = false
mirror = true if $back_attack
id = @active_action[1]
target = @active_action[2]
x = y = mem = 0
if target == 0
if @target_battler == nil
x = self.x
y = self.y
else
if @target_battler[0] == nil
x = self.x
y = self.y
else
x = @target_battler[0].position_x
y = @target_battler[0].position_y
end
end
elsif target == 1
if @battler.actor?
for target in $game_troop.enemies
x += target.position_x
y += target.position_y
mem += 1
end
x = x / mem
y = y / mem
else
for target in $game_party.actors
x += target.position_x
y += target.position_y
mem += 1
end
x = x / mem
y = y / mem
end
elsif target == 2
if @battler.actor?
for target in $game_party.actors
x += target.position_x
y += target.position_y
mem += 1
end
x = x / mem
y = y / mem
else
for target in $game_troop.enemies
x += target.position_x
y += target.position_y
mem += 1
end
x = x / mem
y = y / mem
end
else
x = self.x
y = self.y
end
plus_x = @active_action[6]
plus_y = @active_action[7]
plus_x *= -1 if @battler.is_a?(Game_Enemy)
distanse_x = x - self.x - plus_x
distanse_y = y - self.y - plus_y
type = @active_action[3]
speed = @active_action[4]
orbit = @active_action[5]
if @active_action[8] == 0
@move_anime.base_x = self.x + plus_x
@move_anime.base_y = self.y + plus_y
elsif @active_action[8] == 1
@move_anime.base_x = x + plus_x
@move_anime.base_y = y + plus_y
distanse_y = distanse_y * -1
distanse_x = distanse_x * -1
else
@move_anime.base_x = x
@move_anime.base_y = y
distanse_x = distanse_y = 0
end
if @active_action[10] == ""
weapon = ""
elsif @anime_flug != true
weapon = ""
else
if @battler.actor?
battler = $game_party.actors[@battler.index]
weapon_id = battler.weapon_id
else
battler = $game_troop.enemies[@battler.index]
weapon_id = battler.weapon
end
weapon_act = ANIME[@active_action[10]].dup if @active_action[10] != ""
if weapon_id != 0 && weapon_act.size == 3
weapon_file = $data_weapons[weapon_id].flying_graphic
if weapon_file == ""
weapon_name = $data_weapons[weapon_id].graphic
icon_weapon = false
if weapon_name == ""
weapon_name = $data_weapons[weapon_id].icon_name
icon_weapon = true
end
else
icon_weapon = false
weapon_name = weapon_file
end
weapon = @active_action[10]
elsif weapon_act.size == 3
weapon = ""
elsif weapon_act != nil && $data_skills[@active_battler.current_action.skill_id] != nil
icon_weapon = false
weapon_name = $data_skills[@battler.current_action.skill.id].flying_graphic
weapon = @active_action[10]
end
end
@move_anime.z = 1
@move_anime.z = 1000 if @active_action[9]
@move_anime.anime_action(id,mirror,distanse_x,distanse_y,type,speed,orbit,weapon,weapon_name,icon_weapon)
end
#--------------------------------------------------------------------------
def anime_finish
return individual_action_end if @individual_targets.size != 0
send_action(@active_action[0]) if @battler.active
mirage_off if @mirage_flug
start_action(@repeat_action) unless @non_repeat
end
#--------------------------------------------------------------------------
def collapse_action
@non_repeat = true
@effect_type = COLLAPSE
@collapse_type = @battler.collapse_type unless @battler.actor?
@battler_visible = false unless @battler.actor?
@effect_duration = COLLAPSE_WAIT + 32 if @collapse_type == 2
@effect_duration = 360 if @collapse_type == 3
end
#--------------------------------------------------------------------------
def normal_collapse
if @effect_duration == 31
$game_system.se_play($data_system.enemy_collapse_se)
self.blend_type = 1
self.color.set(255, 64, 64, 255)
end
self.opacity = 256 - (48 - @effect_duration) * 6 if @effect_duration <= 31
end
#--------------------------------------------------------------------------
def boss_collapse
if @effect_duration == 320
Audio.se_play("Audio/SE/124-Thunder02", 100, 80)
self.flash(Color.new(255, 255, 255), 60)
viewport.flash(Color.new(255, 255, 255), 20)
end
if @effect_duration == 290
Audio.se_play("Audio/SE/124-Thunder02", 100, 80)
self.flash(Color.new(255, 255, 255), 60)
viewport.flash(Color.new(255, 255, 255), 20)
end
if @effect_duration == 250
Audio.se_play("Audio/SE/049-Explosion02",100, 50)
reset
self.blend_type = 1
self.color.set(255, 128, 128, 128)
end
if @effect_duration < 250
self.src_rect.set(0, @effect_duration - 250, @width, @height - @shadow.bitmap.height / 2)
self.x += 10 if @effect_duration % 2 == 0
self.opacity = @effect_duration - 20
return if @effect_duration < 100
Audio.se_play("Audio/SE/049-Explosion02",100, 50) if @effect_duration % 80 == 0
end
end
end
#==============================================================================
# Sideview Battle System Version 2.2xp
#==============================================================================
#==============================================================================
# ■ Atoa Module
#==============================================================================
$atoa_script = {} if $atoa_script.nil?
$atoa_script["SBS Tankentai"] = true
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
include N01
#--------------------------------------------------------------------------
attr_accessor :spriteset
#--------------------------------------------------------------------------
def main
fix_weapon_init
start
create_viewport
process_transition
update_battle
terminate
fix_weapon_end
end
#--------------------------------------------------------------------------
def start
@battle_start = true
$game_temp.in_battle = true
$game_temp.battle_turn = 0
$game_temp.battle_event_flags.clear
$game_temp.battle_abort = false
$game_temp.battle_main_phase = false
$game_temp.battleback_name = $game_map.battleback_name
$game_temp.forcing_battler = nil
$game_system.battle_interpreter.setup(nil, 0)
@troop_id = $game_temp.battle_troop_id
$game_troop.setup(@troop_id)
for enemy in $game_troop.enemies
enemy.true_immortal = enemy.immortal
end
end
#--------------------------------------------------------------------------
def create_viewport
s1 = $data_system.words.attack
s2 = $data_system.words.skill
s3 = $data_system.words.guard
s4 = $data_system.words.item
@actor_command_window = Window_Command.new(160, [s1, s2, s3, s4])
@actor_command_window.y = 160
@actor_command_window.back_opacity = 160
@actor_command_window.active = false
@actor_command_window.visible = false
@party_command_window = Window_PartyCommand.new
@help_window = Window_Help.new
@help_window.back_opacity = 160
@help_window.visible = false
@active_battler_window = Window_NameCommand.new(@active_battler, 240, 64)
@active_battler_window.visible = false
@status_window = Window_BattleStatus.new
@message_window = Window_Message.new
@spriteset = Spriteset_Battle.new
@wait_count, @escape_ratio = 0, 50
end
#--------------------------------------------------------------------------
def process_transition
if $data_system.battle_transition == ""
Graphics.transition(20)
else
Graphics.transition(40, "Graphics/Transitions/" + $data_system.battle_transition)
end
start_phase1
end
#--------------------------------------------------------------------------
def update_battle
loop do
Graphics.update
Input.update
update
break if $scene != self
end
end
#--------------------------------------------------------------------------
def terminate
$game_map.refresh
Graphics.freeze
@actor_command_window.dispose
@party_command_window.dispose
@help_window.dispose
@status_window.dispose
@message_window.dispose
@skill_window.dispose if @skill_window != nil
@item_window.dispose if @item_window != nil
@result_window.dispose if @result_window != nil
@spriteset.dispose
if $scene.is_a?(Scene_Title)
Graphics.transition
Graphics.freeze
end
$scene = nil if $BTEST and not $scene.is_a?(Scene_Gameover)
end
#--------------------------------------------------------------------------
def fix_weapon_init
for member in $game_party.actors
if member.weapons[0] == nil and member.weapons[1] != nil
weapon_to_equip = member.armor1_id
member.equip(1, 0)
member.equip(0, weapon_to_equip)
member.two_swords_change = true
end
end
end
#--------------------------------------------------------------------------
def fix_weapon_end
for member in $game_party.actors
if member.two_swords_change
weapon_to_re_equip = member.weapon_id
member.equip(0, 0)
member.equip(1, weapon_to_re_equip)
member.two_swords_change = false
end
end
end
#--------------------------------------------------------------------------
def update_basic
Graphics.update
Input.update
$game_system.update
$game_screen.update
@spriteset.update
end
#--------------------------------------------------------------------------
def update_effects
for battler in $game_party.actors + $game_troop.enemies
if battler.exist?
battler_sprite = @spriteset.actor_sprites[battler.index] if battler.actor?
battler_sprite = @spriteset.enemy_sprites[battler.index] if battler.is_a?(Game_Enemy)
battler_sprite.effects_update
end
end
end
#--------------------------------------------------------------------------
def wait(duration)
for i in 0...duration
update_basic
end
end
#--------------------------------------------------------------------------
def pop_help(obj)
@help_window.set_text(obj, 1)
loop do
update_basic
break @help_window.visible = false if Input.trigger?(Input::C)
end
end
#--------------------------------------------------------------------------
alias start_phase1_n01 start_phase1
def start_phase1
for member in $game_party.actors + $game_troop.enemies
member.dead_anim = member.dead? ? true : false
@spriteset.set_stand_by_action(member.actor?, member.index) unless member.dead_anim
end
start_phase1_n01
$clear_enemies_actions = false
if $preemptive
pop_help(PREEMPTIVE_ALERT)
$clear_enemies_actions = true
end
@battle_start = false unless $back_attack
return unless $back_attack
pop_help(BACK_ATTACK_ALERT)
@battle_start = false
$game_party.clear_actions
start_phase4
end
#--------------------------------------------------------------------------
alias start_phase4_n01 start_phase4
def start_phase4
start_phase4_n01
@active_battler_window.visible = false
if $clear_enemies_actions
$clear_enemies_actions = false
$game_troop.clear_actions
end
end
#--------------------------------------------------------------------------
def judge
if $game_party.all_dead? or $game_party.actors.size == 0
if $game_temp.battle_can_lose
$game_system.bgm_play($game_temp.map_bgm)
battle_end(2)
return true
end
$game_temp.gameover = true
return true
end
for enemy in $game_troop.enemies
return false if enemy.exist?
end
process_victory
return true
end
#--------------------------------------------------------------------------
def update_phase2_escape
enemies_agi = enemies_number = 0
for enemy in $game_troop.enemies
if enemy.exist?
enemies_agi += enemy.agi
enemies_number += 1
end
end
enemies_agi /= [enemies_number, 1].max
actors_agi = actors_number = 0
for actor in $game_party.actors
if actor.exist?
actors_agi += actor.agi
actors_number += 1
end
end
actors_agi /= [actors_number, 1].max
@success = rand(100) < @escape_ratio * actors_agi / enemies_agi
@party_command_window.visible = false
@party_command_window.active = false
wait(2)
if @success
$game_system.se_play($data_system.escape_se)
for actor in $game_party.actors
unless actor.dead?
@spriteset.set_action(true, actor.index, actor.run_success)
end
end
pop_help(ESCAPE_SUCCESS)
$game_system.bgm_play($game_temp.map_bgm)
battle_end(1)
else
@escape_ratio += 5
$game_party.clear_actions
$game_system.se_play($data_system.escape_se)
for actor in $game_party.actors
unless actor.dead?
@spriteset.set_action(true, actor.index,actor.run_ng)
end
end
pop_help(ESCAPE_FAIL)
start_phase4
end
end
#--------------------------------------------------------------------------
def process_victory
for enemy in $game_troop.enemies
break boss_wait = true if enemy.collapse_type == 3
end
wait(440) if boss_wait
wait(WIN_WAIT) unless boss_wait
for actor in $game_party.actors
unless actor.restriction == 4
@spriteset.set_action(true, actor.index,actor.win)
end
end
start_phase5
end
#--------------------------------------------------------------------------
def start_phase5
@phase = 5
$game_system.me_play($game_system.battle_end_me)
$game_system.bgm_play($game_temp.map_bgm)
treasures = []
for enemy in $game_troop.enemies
gold = gold.nil? ? enemy.gold : gold + enemy.gold
treasures << treasure_drop(enemy) unless enemy.hidden
end
exp = gain_exp
treasures = treasures.compact
$game_party.gain_gold(gold)
for item in treasures
case item
when RPG::Item
$game_party.gain_item(item.id, 1)
when RPG::Weapon
$game_party.gain_weapon(item.id, 1)
when RPG::Armor
$game_party.gain_armor(item.id, 1)
end
end
@result_window = Window_BattleResult.new(exp, gold, treasures)
@result_window.add_multi_drops if $atoa_script['Multi Drop']
@phase5_wait_count = 100
end
#--------------------------------------------------------------------------
def treasure_drop(enemy)
if rand(100) < enemy.treasure_prob
treasure = $data_items[enemy.item_id] if enemy.item_id > 0
treasure = $data_weapons[enemy.weapon_id] if enemy.weapon_id > 0
treasure = $data_armors[enemy.armor_id] if enemy.armor_id > 0
end
return treasure
end
#--------------------------------------------------------------------------
def gain_exp
exp = exp_gained
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
if actor.cant_get_exp? == false
last_level = actor.level
actor.exp += exp
if actor.level > last_level
@status_window.level_up(i)
end
end
end
return exp
end
#--------------------------------------------------------------------------
def exp_gained
for enemy in $game_troop.enemies
exp = exp.nil? ? enemy.exp : exp + enemy.exp
end
if EXP_SHARE
actor_number = 0
for actor in $game_party.actors
actor_number += 1 unless actor.cant_get_exp?
end
exp = exp / [actor_number, 1].max
end
return exp
end
#--------------------------------------------------------------------------
alias acbs_update_phase5 update_phase5
def update_phase5
@result_window.update
acbs_update_phase5
end
#--------------------------------------------------------------------------
alias phase3_next_actor_n01 phase3_next_actor
def phase3_next_actor
if @active_battler != nil && @active_battler.inputable?
@spriteset.set_action(true, @actor_index, @active_battler.command_a)
end
@wait_count = 32 if @actor_index == $game_party.actors.size-1
phase3_next_actor_n01
if @active_battler != nil && @active_battler.inputable?
@spriteset.set_action(true, @actor_index,@active_battler.command_b)
end
end
#--------------------------------------------------------------------------
alias phase3_prior_actor_n01 phase3_prior_actor
def phase3_prior_actor
if @active_battler != nil && @active_battler.inputable?
@active_battler.current_action.clear
@spriteset.set_action(true, @actor_index,@active_battler.command_a)
end
phase3_prior_actor_n01
if @active_battler != nil && @active_battler.inputable?
@active_battler.current_action.clear
@spriteset.set_action(true, @actor_index,@active_battler.command_b)
end
end
#--------------------------------------------------------------------------
alias start_phase2_n01 start_phase2
def start_phase2
@active_battler_window.visible = false
start_phase2_n01
end
#--------------------------------------------------------------------------
alias phase3_setup_command_window_n01 phase3_setup_command_window
def phase3_setup_command_window
phase3_setup_command_window_n01
@actor_command_window.x = COMMAND_WINDOW_POSITION[0]
@actor_command_window.y = COMMAND_WINDOW_POSITION[1]
@actor_command_window.z = 2000
@actor_command_window.index = 0
@actor_command_window.back_opacity = COMMAND_OPACITY
@active_battler_window.refresh(@active_battler)
@active_battler_window.visible = true if BATTLER_NAME_WINDOW
end
#--------------------------------------------------------------------------
alias acbs_update_phase3_basic_command_scenebattle update_phase3_basic_command
def update_phase3_basic_command
if Input.trigger?(Input::C)
case @actor_command_window.commands[@actor_command_window.index]
when $data_system.words.attack
$game_system.se_play($data_system.decision_se)
@active_battler.current_action.kind = 0
@active_battler.current_action.basic = 0
@actor_command_window.active = false
@actor_command_window.visible = false
start_enemy_select
return
when $data_system.words.item
$game_system.se_play($data_system.decision_se)
@active_battler.current_action.kind = 2
start_item_select
return
when $data_system.words.guard
$game_system.se_play($data_system.decision_se)
@active_battler.current_action.kind = 0
@active_battler.current_action.basic = 1
phase3_next_actor
return
end
end
acbs_update_phase3_basic_command_scenebattle
end
#--------------------------------------------------------------------------
def now_action(battler = @active_battler)
return if battler.nil?
@now_action = nil
case battler.current_action.kind
when 0
@now_action = $data_weapons[battler.weapon_id] if battler.current_action.basic == 0
when 1
@now_action = $data_skills[battler.current_action.skill_id]
when 2
@now_action = $data_items[battler.current_action.item_id]
end
end
#--------------------------------------------------------------------------
def start_enemy_select
now_action
@enemy_arrow = Arrow_Enemy.new(@spriteset.viewport2)
@enemy_arrow.help_window = @help_window
@actor_command_window.active = false
@actor_command_window.visible = false
@active_battler_window.visible = false
@status_window.visible = true
end
#--------------------------------------------------------------------------
alias start_actor_select_n01 start_actor_select
def start_actor_select
now_action
start_actor_select_n01
@status_window.visible = true
@active_battler_window.visible = false
@actor_arrow.input_right if @now_action.extension.include?("OTHERS")
end
#--------------------------------------------------------------------------
alias update_phase3_actor_select_n01 update_phase3_actor_select
def update_phase3_actor_select
@actor_arrow.input_update_target if @now_action.extension.include?("OTHERS") and @actor_arrow.index == @active_battler.index
update_phase3_actor_select_n01
end
#--------------------------------------------------------------------------
alias update_phase3_n01 update_phase3
def update_phase3
if @enemy_arrow_all != nil
update_phase3_select_all_enemies
return
elsif @actor_arrow_all != nil
update_phase3_select_all_actors
return
elsif @battler_arrow_all != nil
update_phase3_select_all_battlers
return
end
update_phase3_n01
end
#--------------------------------------------------------------------------
alias update_phase3_skill_select_n01 update_phase3_skill_select
def update_phase3_skill_select
@status_window.visible = false if HIDE_WINDOW
if Input.trigger?(Input::C)
@skill = @skill_window.skill
if @skill == nil or not @active_battler.skill_can_use?(@skill.id)
$game_system.se_play($data_system.buzzer_se)
return
end
@active_battler.current_action.skill_id = @skill.id
@skill_window.visible = false
if @skill.extension.include?("TARGETALL")
$game_system.se_play($data_system.decision_se)
start_select_all_battlers
return
end
if (@skill.extension.include?("RANDOMTARGET") and @skill.scope <= 2) or @skill.scope == 2
$game_system.se_play($data_system.decision_se)
start_select_all_enemies
return
end
if (@skill.extension.include?("RANDOMTARGET") and @skill.scope > 2) or @skill.scope == 4
$game_system.se_play($data_system.decision_se)
start_select_all_actors
return
end
end
update_phase3_skill_select_n01
end
#--------------------------------------------------------------------------
alias update_phase3_item_select_n01 update_phase3_item_select
def update_phase3_item_select
@status_window.visible = false if HIDE_WINDOW
if Input.trigger?(Input::C)
@item = @item_window.item
if @item == nil or not $game_party.item_can_use?(@item.id)
$game_system.se_play($data_system.buzzer_se)
return
end
@active_battler.current_action.item_id = @item.id
@item_window.visible = false
if @item.extension.include?("TARGETALL")
$game_system.se_play($data_system.decision_se)
start_select_all_battlers
return
end
if @item.extension.include?("RANDOMTARGET") and @item.scope <= 2 or @item.scope == 2
$game_system.se_play($data_system.decision_se)
start_select_all_enemies
return
end
if (@item.extension.include?("RANDOMTARGET") and @item.scope > 2) or @item.scope == 4
$game_system.se_play($data_system.decision_se)
start_select_all_actors
return
end
end
update_phase3_item_select_n01
end
#--------------------------------------------------------------------------
def update_phase3_select_all_enemies
@enemy_arrow_all.update_multi_arrow
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
end_select_all_enemies
return
end
if Input.trigger?(Input::C)
$game_system.se_play($data_system.decision_se)
if @skill_window != nil
end_skill_select
end
if @item_window != nil
end_item_select
end
end_select_all_enemies
phase3_next_actor
return
end
end
#--------------------------------------------------------------------------
def update_phase3_select_all_actors
@actor_arrow_all.update_multi_arrow
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
end_select_all_actors
return
end
if Input.trigger?(Input::C)
$game_system.se_play($data_system.decision_se)
if @skill_window != nil
end_skill_select
end
if @item_window != nil
end_item_select
end
end_select_all_actors
phase3_next_actor
return
end
end
#--------------------------------------------------------------------------
def update_phase3_select_all_battlers
@battler_arrow_all.update_multi_arrow
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
end_select_all_battlers
return
end
if Input.trigger?(Input::C)
$game_system.se_play($data_system.decision_se)
if @skill_window != nil
end_skill_select
end
if @item_window != nil
end_item_select
end
end_select_all_battlers
phase3_next_actor
return
end
end
#--------------------------------------------------------------------------
def start_select_all_enemies
now_action
@status_window.visible = true
@active_battler_window.visible = false
@enemy_arrow_all = Arrow_Enemy_All.new(@spriteset.viewport2)
end
#--------------------------------------------------------------------------
def start_select_all_actors
now_action
@status_window.visible = true
@active_battler_window.visible = false
@actor_arrow_all = Arrow_Actor_All.new(@spriteset.viewport2)
end
#--------------------------------------------------------------------------
def start_select_all_battlers
now_action
@status_window.visible = true
@active_battler_window.visible = false
@battler_arrow_all = Arrow_Battler_All.new(@spriteset.viewport2)
end
#--------------------------------------------------------------------------
def end_select_all_actors
@actor_arrow_all.dispose_multi_arrow
@actor_arrow_all = nil
@active_battler_window.visible = true if @actor_command_window.index == 0 and BATTLER_NAME_WINDOW
end
#--------------------------------------------------------------------------
def end_select_all_enemies
@enemy_arrow_all.dispose_multi_arrow
@enemy_arrow_all = nil
@active_battler_window.visible = true if @actor_command_window.index == 0 and BATTLER_NAME_WINDOW
end
#--------------------------------------------------------------------------
def end_select_all_battlers
@battler_arrow_all.dispose_multi_arrow
@battler_arrow_all = nil
@active_battler_window.visible = true if @actor_command_window.index == 0 and BATTLER_NAME_WINDOW
end
#--------------------------------------------------------------------------
alias end_enemy_select_n01 end_enemy_select
def end_enemy_select
end_enemy_select_n01
@active_battler_window.visible = true if @actor_command_window.index == 0 and BATTLER_NAME_WINDOW
end
#--------------------------------------------------------------------------
alias start_skill_select_n01 start_skill_select
def start_skill_select
start_skill_select_n01
@status_window.visible = false if HIDE_WINDOW
@active_battler_window.visible = false
end
#--------------------------------------------------------------------------
alias end_skill_select_n01 end_skill_select
def end_skill_select
end_skill_select_n01
@status_window.visible = true
@active_battler_window.visible = true if BATTLER_NAME_WINDOW
end
#--------------------------------------------------------------------------
alias start_item_select_n01 start_item_select
def start_item_select
start_item_select_n01
@status_window.visible = false if HIDE_WINDOW
@active_battler_window.visible = false
end
#--------------------------------------------------------------------------
alias end_item_select_n01 end_item_select
def end_item_select
end_item_select_n01
@status_window.visible = true
@active_battler_window.visible = true if BATTLER_NAME_WINDOW
end
#--------------------------------------------------------------------------
alias make_action_orders_n01 make_action_orders
def make_action_orders
make_action_orders_n01
for battler in @action_battlers
skill_id = battler.current_action.skill_id
item_id = battler.current_action.item_id
next if battler.current_action.kind == 0
extension = $data_skills[skill_id].extension if skill_id != 0
extension = $data_items[item_id].extension if item_id != 0
battler.current_action.speed = 9999 if extension.include?("FAST")
battler.current_action.speed = -1 if extension.include?("SLOW")
end
@action_battlers.sort! {|a,b|
b.current_action.speed - a.current_action.speed }
for enemy in $game_troop.enemies
if enemy.action_time[0] != 1
action_time = 0
for i in 1...enemy.action_time[0]
action_time += 1 if rand(100) < enemy.action_time[1]
end
enemy.act_time = action_time
action_time.times do
enemy_order_time(enemy)
action_time -= 1
break if action_time == 0
end
enemy.adj_speed = nil
end
end
end
#--------------------------------------------------------------------------
def enemy_order_time(enemy)
enemy.make_action_speed2(enemy.action_time[2])
select_time = 0
for member in @action_battlers
select_time += 1
break @action_battlers.push(enemy) if member.current_action.speed < enemy.adj_speed
break @action_battlers.push(enemy) if select_time == @action_battlers.size
end
end
#--------------------------------------------------------------------------
def update_phase4_step1
return if @spriteset.effect?
return @wait_count -= 1 if @wait_count > 0
@help_window.visible = false
return if judge
if $game_temp.forcing_battler == nil
setup_battle_event
return if $game_system.battle_interpreter.running?
end
if $game_temp.forcing_battler != nil
@action_battlers.delete($game_temp.forcing_battler)
@action_battlers.unshift($game_temp.forcing_battler)
end
if @action_battlers.size == 0
turn_ending
start_phase2
return
end
@animation1_id = 0
@animation2_id = 0
@common_event_id = 0
@active_battler = @action_battlers.shift
return if @active_battler.index == nil
@active_battler.remove_states_auto
@status_window.refresh
@phase4_step = 2
end
#--------------------------------------------------------------------------
def turn_ending
for member in $game_party.actors + $game_troop.enemies
member.current_action.clear
next unless member.exist?
member.slip_damage = false
actor = member.actor?
for state in member.battler_states
member.remove_state(state.id) if state.extension.include?("ZEROTURNLIFT")
end
damage = 0
for state in member.battler_states
next unless state.extension.include?("SLIPDAMAGE")
for ext in state.slip_extension
if ext[0] == "hp"
base_damage = ext[1] + member.maxhp * ext[2] / 100
damage += base_damage + base_damage * (rand(5) - rand(5)) / 100
slip_pop = ext[3]
slip_dead = ext[4]
slip_damage_flug = true
member.slip_damage = true
end
end
end
if member.slip_damage && member.exist? && !slip_damage_flug
damage += member.apply_variance(member.maxhp / 10, 10)
slip_dead = false
slip_pop = true
slip_damage_flug = true
member.slip_damage = true
end
damage = member.hp - 1 if damage >= member.hp && slip_dead = false
member.hp -= damage
member.damage = damage if damage > 0
member.perform_collapse if member.dead? && member.slip_damage
@spriteset.set_damage_pop(actor, member.index, damage) if slip_pop
@spriteset.set_stand_by_action(actor, member.index) if member.hp <= 0 and not member.dead_anim
member.dead_anim = member.dead? ? true : false
end
@status_window.refresh
wait(DMG_DURATION / 2) if slip_damage_flug
slip_damage_flug = false
for member in $game_party.actors + $game_troop.enemies
next unless member.exist?
actor = member.actor?
damage = 0
for state in member.battler_states
next unless state.extension.include?("SLIPDAMAGE")
for ext in state.slip_extension
if ext[0] == "mp"
base_damage = ext[1] + member.maxsp * ext[2] / 100
damage += base_damage + base_damage * (rand(5) - rand(5)) / 100
slip_pop = ext[3]
slip_damage_flug = true
end
end
member.sp_damage = true
member.sp -= damage
member.damage = damage if damage > 0
@spriteset.set_damage_pop(actor, member.index, damage) if slip_pop
end
end
@status_window.refresh
wait(DMG_DURATION / 2) if slip_damage_flug
for member in $game_party.actors + $game_troop.enemies
next unless member.exist?
actor = member.actor?
damage = 0
for state in member.battler_states
next unless state.extension.include?("REGENERATION")
for ext in state.slip_extension
if ext[0] == "hp"
base_damage = ext[1] + member.maxhp * ext[2] / 100
damage += base_damage + base_damage * (rand(5) - rand(5)) / 100
slip_pop = ext[3]
slip_damage_flug = true
end
end
member.hp -= damage
member.damage = damage if damage < 0
@spriteset.set_damage_pop(actor, member.index, damage) if slip_pop
end
end
@status_window.refresh
wait(DMG_DURATION / 2) if slip_damage_flug
for member in $game_party.actors + $game_troop.enemies
next unless member.exist?
actor = member.actor?
damage = 0
for state in member.battler_states
next unless state.extension.include?("REGENERATION")
for ext in state.slip_extension
if ext[0] == "mp"
base_damage = ext[1] + member.maxhp * ext[2] / 100
damage += base_damage + base_damage * (rand(5) - rand(5)) / 100
slip_pop = ext[3]
slip_damage_flug = true
end
end
member.sp_damage = true
member.sp -= damage
member.damage = damage if damage < 0
@spriteset.set_damage_pop(actor, member.index, damage) if slip_pop
end
end
@status_window.refresh
wait(DMG_DURATION / 2) if slip_damage_flug
end
#--------------------------------------------------------------------------
alias update_phase4_step2_n01 update_phase4_step2
def update_phase4_step2
for member in $game_party.actors + $game_troop.enemies
member.dead_anim = member.dead? ? true : false
end
if @active_battler.current_action.kind != 0
obj = $data_skills[@active_battler.current_action.skill_id] if @active_battler.current_action.kind == 1
obj = $data_items[@active_battler.current_action.item_id] if @active_battler.current_action.kind == 2
@active_battler.white_flash = false if obj != nil &&obj.extension.include?("NOFLASH")
end
@active_battler.active = true
update_phase4_step2_n01
if @active_battler != nil && @active_battler.derivation != 0
@active_battler.current_action.kind = 1
@active_battler.current_action.skill_id = @active_battler.derivation
@action_battlers.unshift(@active_battler)
end
if @active_battler != nil && !@active_battler.actor? && @active_battler.act_time != 0
@active_battler.make_action
@active_battler.act_time -= 1
end
update_phase4_step6
end
#--------------------------------------------------------------------------
alias update_phase4_step6_n01 update_phase4_step6
def update_phase4_step6
update_phase4_step6_n01
@active_battler.active = false if @active_battler != nil
end
#--------------------------------------------------------------------------
def make_basic_action_result
if @active_battler.current_action.basic == 0
execute_action_attack
return
end
if @active_battler.current_action.basic == 1
@help_window.set_text("#{@active_battler.name} defends", 1)
@help_window.visible = true
@active_battler.active = false
@active_battler.defense_pose = true
@spriteset.set_stand_by_action(@active_battler.actor?, @active_battler.index)
wait(45)
@help_window.visible = false
return
end
if @active_battler.is_a?(Game_Enemy) and @active_battler.current_action.basic == 2
@spriteset.set_action(false, @active_battler.index, @active_battler.run_success)
$game_system.se_play($data_system.escape_se)
@active_battler.escape
pop_help("#{@active_battler.name} escaped...")
return
end
if @active_battler.current_action.basic == 3
@active_battler.active = false
$game_temp.forcing_battler = nil
@phase4_step = 1
return
end
end
#--------------------------------------------------------------------------
def execute_action_attack
if @active_battler.actor?
if @active_battler.weapon_id == 0
action = @active_battler.non_weapon
immortaling
else
action = $data_weapons[@active_battler.weapon_id].base_action
if $data_weapons[@active_battler.weapon_id].plus_state_set.include?(1)
for member in $game_party.actors + $game_troop.enemies
next if member.immortal
next if member.dead?
member.dying = true
end
else
immortaling
end
end
else
if @active_battler.weapon == 0
action = @active_battler.base_action
immortaling
else
action = $data_weapons[@active_battler.weapon].base_action
if $data_weapons[@active_battler.weapon].plus_state_set.include?(1)
for member in $game_party.actors + $game_troop.enemies
next if member.immortal
next if member.dead?
member.dying = true
end
else
immortaling
end
end
end
target_decision
@spriteset.set_action(@active_battler.actor?, @active_battler.index, action)
playing_action
end
#--------------------------------------------------------------------------
def make_attack_targets
@target_battlers = []
if @active_battler.is_a?(Game_Enemy)
if @active_battler.restriction == 3
target = $game_troop.random_target_enemy
elsif @active_battler.restriction == 2
target = $game_party.random_target_actor
else
index = @active_battler.current_action.target_index
target = $game_party.smooth_target_actor(index)
end
end
if @active_battler.actor?
if @active_battler.restriction == 3
target = $game_party.random_target_actor
elsif @active_battler.restriction == 2
target = $game_troop.random_target_enemy
else
index = @active_battler.current_action.target_index
target = $game_troop.smooth_target_enemy(index)
end
end
@target_battlers = [target]
return @target_battlers
end
#--------------------------------------------------------------------------
def make_skill_action_result
skill = $data_skills[@active_battler.current_action.skill_id]
if skill.plus_state_set.include?(1)
for member in $game_party.actors + $game_troop.enemies
next if member.immortal
next if member.dead?
member.dying = true
end
else
immortaling
end
return unless @active_battler.skill_can_use?(skill.id)
target_decision(skill)
@active_battler.consum_skill_cost(skill)
@status_window.refresh
@spriteset.set_action(@active_battler.actor?, @active_battler.index, skill.base_action)
@help_window.set_text(skill.name, 1) unless skill.extension.include?("HELPHIDE")
playing_action
@common_event_id = skill.common_event_id
end
#--------------------------------------------------------------------------
def make_item_action_result
item = $data_items[@active_battler.current_action.item_id]
unless $game_party.item_can_use?(item.id)
@phase4_step = 1
return
end
if @item.consumable
$game_party.lose_item(item.id, 1)
end
immortaling
target_decision(item)
@spriteset.set_action(@active_battler.actor?, @active_battler.index, item.base_action)
@help_window.set_text(item.name, 1) unless item.extension.include?("HELPHIDE")
playing_action
@common_event_id = item.common_event_id
end
#--------------------------------------------------------------------------
def target_decision(obj = nil)
if obj != nil
set_target_battlers(obj.scope)
if obj.extension.include?("TARGETALL")
@target_battlers = []
if obj.scope != 5 or obj.scope != 6
for target in $game_troop.enemies + $game_party.actors
@target_battlers.push(target) if target.exist?
end
else
for target in $game_troop.enemies + $game_party.actors
@target_battlers.push(target) if target != nil && target.hp0?
end
end
end
@target_battlers.delete(@active_battler) if obj.extension.include?("OTHERS")
if obj.extension.include?("RANDOMTARGET")
randum_targets = @target_battlers.dup
@target_battlers = [randum_targets[rand(randum_targets.size)]]
end
else
@target_battlers = make_attack_targets
end
if @target_battlers.size == 0
action = @active_battler.recover_action
@spriteset.set_action(@active_battler.actor?, @active_battler.index, action)
end
@spriteset.set_target(@active_battler.actor?, @active_battler.index, @target_battlers)
end
#--------------------------------------------------------------------------
def playing_action
loop do
update_basic
update_effects
action = @active_battler.play
next if action == 0
@active_battler.play = 0
if action[0] == "Individual"
individual
elsif action == "Can Collapse"
unimmortaling
elsif action == "Cancel Action"
break action_end
elsif action == "End"
break action_end
elsif action[0] == "OBJ_ANIM"
damage_action(action[1])
end
end
end
#--------------------------------------------------------------------------
def individual
@individual_target = @target_battlers
@stand_by_target = @target_battlers.dup
end
#--------------------------------------------------------------------------
def immortaling
for member in $game_party.actors + $game_troop.enemies
member.immortal = true unless member.dead?
end
end
#--------------------------------------------------------------------------
def unimmortaling
return if @active_battler.individual
for member in $game_party.actors + $game_troop.enemies
member.immortal = false
member.add_state(1) if member.dead?
if member.dead? and not member.dead_anim
member.perform_collapse
@spriteset.set_stand_by_action(member.actor?, member.index)
end
member.dead_anim = member.dead? ? true : false
next unless member.dead?
resurrection(member)
end
update_basic
@status_window.refresh
end
#--------------------------------------------------------------------------
def resurrection(target)
for state in target.battler_states
for ext in state.extension
name = ext.split('')
next unless name[0] == "A"
wait(25)
name = name.join
name.slice!("AUTOLIFE/")
target.hp = target.maxhp * name.to_i / 100
target.remove_state(1)
target.remove_state(state.id)
target.animation_id = RESURRECTION
target.animation_hit = true
target.anime_mirror = true if $back_attack
@status_window.refresh
wait($data_animations[RESURRECTION].frame_max * 2)
end
end
end
#--------------------------------------------------------------------------
def magic_reflection(target, obj)
return if obj != nil and $data_skills[@active_battler.current_action.skill_id].int_f == 0
for state in target.battler_states
for ext in state.extension
name = ext.split('')
next unless name[0] == "M"
if name[3] == "R"
name = name.join
name.slice!("MAGREFLECT/")
target.animation_id = name.to_i
target.animation_hit = true
target.anime_mirror = true if $back_attack
@reflection = true
else
name = name.join
name.slice!("MAGNULL/")
target.animation_id = name.to_i
target.animation_hit = true
target.anime_mirror = true if $back_attack
@invalid = true
end
end
end
end
#--------------------------------------------------------------------------
def physics_reflection(target, obj)
return if obj != nil && $data_skills[@active_battler.current_action.skill_id].str_f == 0
for state in target.battler_states
for ext in state.extension
name = ext.split('')
next unless name[0] == "P"
if name[3] == "R"
name = name.join
name.slice!("PHYREFLECT/")
target.animation_id = name.to_i
target.animation_hit = true
target.anime_mirror = true if $back_attack
@reflection = true
else
name = name.join
name.slice!("PHYNULL/")
target.animation_id = name.to_i
target.animation_hit = true
target.anime_mirror = true if $back_attack
@invalid = true
end
end
end
end
#--------------------------------------------------------------------------
def absorb_cost(target, obj)
for state in target.battler_states
if state.extension.include?("COSTABSORB")
cost = @active_battler.calc_sp_cost(@active_battler, obj)
return target.hp += cost if obj.extension.include?("HPCONSUME")
return target.mp += cost
end
end
end
#--------------------------------------------------------------------------
def absorb_attack(obj, target, index, actor)
for ext in obj.extension
return if target.evaded or target.missed or target.damage == 0 or target.damage == nil
name = ext.split('')
next unless name[3] == "G" and name[1] == "D"
name = name.join
name.slice!("%DMGABSORB/")
kind = "hp" unless target.sp_damage
kind = "sp" if target.sp_damage
absorb = target.damage * name.to_i / 100
@wide_attack = true if obj.scope == 2 or obj.scope == 4 or obj.scope == 6 or obj.extension.include?("TARGETALL")
if @wide_attack && @absorb == nil && @target_battlers.size != 1
@absorb = absorb
@absorb_target_size = @target_battlers.size - 2
elsif @absorb != nil && @absorb_target_size > 0
@absorb += absorb
@absorb_target_size -= 1
elsif @absorb != nil
@absorb += absorb
absorb_action = ["absorb", nil, kind, @absorb]
@spriteset.set_damage_action(actor, index, absorb_action)
@absorb = nil
@absorb_target_size = nil
@active_battler.perform_collapse
else
absorb_action = ["absorb", nil, kind, absorb]
@spriteset.set_damage_action(actor, index, absorb_action)
@active_battler.perform_collapse
end
end
end
#--------------------------------------------------------------------------
def action_end
@individual_target = nil
@help_window.visible = false if @help_window != nil && @help_window.visible
@active_battler.active = false
unimmortaling
for member in $game_troop.enemies
member.non_dead = false if member.non_dead
end
if @active_battler.reflex != nil
if @active_battler.current_action.kind == 1
obj = $data_skills[@active_battler.current_action.skill_id]
@active_battler.perfect_skill_effect(@active_battler, obj)
elsif @active_battler.current_action.kind == 2
obj = $data_items[@active_battler.current_action.item_id]
@active_battler.item_effect(@active_battler, obj)
else
@active_battler.perfect_attack_effect(@active_battler)
end
pop_damage(@active_battler, obj, @active_battler.reflex)
@active_battler.perform_collapse
@active_battler.reflex = nil
wait(COLLAPSE_WAIT)
end
if @active_battler.derivation != 0
@active_battler.current_action.skill_id = @active_battler.derivation
@active_battler.current_action.kind = 1
@active_battler.derivation = 0
@action_battlers.unshift(@active_battler)
else
@spriteset.set_stand_by_action(@active_battler.actor?, @active_battler.index)
wait(ACTION_WAIT + 20)
end
end
#--------------------------------------------------------------------------
def damage_action(action)
@target_battlers = [@individual_target.shift] if @active_battler.individual
if @active_battler.current_action.kind == 1
obj = $data_skills[@active_battler.current_action.skill_id]
for target in @target_battlers
return if target == nil
if obj.scope == 5 or obj.scope == 6
return unless target.dead?
else
return if target.dead?
end
if target.hp == 0 && obj.scope != 5 && obj.scope != 6
target.perfect_skill_effect(@active_battler, obj)
elsif obj.extension.include?("NOEVADE")
target.perfect_skill_effect(@active_battler, obj)
else
magic_reflection(target, obj) unless obj.extension.include?("IGNOREREFLECT")
physics_reflection(target, obj) unless obj.extension.include?("IGNOREREFLECT")
target.skill_effect(@active_battler, obj) unless @reflection or @invalid
end
pop_damage(target, obj, action) unless @reflection or @invalid
absorb_cost(target, obj)
@active_battler.reflex = action if @reflection
@reflection = false
@invalid = false
end
elsif @active_battler.current_action.kind == 2
obj = $data_items[@active_battler.current_action.item_id]
for target in @target_battlers
return if target == nil
if obj.scope == 5 or obj.scope == 6
return unless target.dead?
else
return if target.dead?
end
target.revival = true if obj.scope == 5 or obj.scope == 6
target.item_effect(obj)
pop_damage(target, obj, action)
end
else
for target in @target_battlers
return if target == nil or target.dead?
physics_reflection(target, nil)
target.perfect_attack_effect(@active_battler) if target.hp <= 0
target.attack_effect(@active_battler) unless target.hp <= 0 unless @reflection or @invalid
pop_damage(target, obj, action) unless @reflection or @invalid
@active_battler.reflex = action if @reflection
@reflection = false
@invalid = false
end
end
return if obj == nil
target_decision(obj) if obj.extension.include?("RANDOMTARGET")
end
#--------------------------------------------------------------------------
def pop_damage(target, obj, action)
index = @active_battler.index
actor = @active_battler.actor?
if obj != nil && obj.extension.size != 0
absorb_attack(obj, target, index, actor)
action[2] = false if obj.extension.include?("NOOVERKILL")
end
@spriteset.set_damage_action(target.actor?, target.index, action)
@status_window.refresh
end
end
#==============================================================================
# ■ Scene_Map
#==============================================================================
class Scene_Map
#--------------------------------------------------------------------------
include N01
#--------------------------------------------------------------------------
alias call_battle_n01 call_battle
#--------------------------------------------------------------------------
def call_battle
$back_attack = $preemptive = false
preemptive_or_back_attack
call_battle_n01
end
#--------------------------------------------------------------------------
def preemptive_or_back_attack
enemies_agi = 0
for enemy in $game_troop.enemies
enemies_agi += enemy.agi
end
enemies_agi /= [$game_troop.enemies.size, 1].max
actors_agi = 0
for actor in $game_party.actors
actors_agi += actor.agi
end
actors_agi /= [$game_party.actors.size, 1].max
preemptive_plus
if actors_agi >= enemies_agi
percent_preemptive = PREEMPTIVE_RATE * ($preemptive_plus ? 3 : 1)
percent_back_attack = BACK_ATTACK_RATE / 2
else
percent_preemptive = (PREEMPTIVE_RATE / 2) * ($preemptive_plus ? 3 : 1)
percent_back_attack = BACK_ATTACK_RATE
end
if rand(100) < percent_preemptive
$preemptive = true
elsif rand(100) < percent_back_attack
$back_attack = true
end
special_back_attack_conditions
special_preemptive_conditions
$preemptive = false if $back_attack or !PREEMPTIVE
$back_attack = false if !BACK_ATTACK
end
#--------------------------------------------------------------------------
def special_back_attack_conditions
for i in 0...BACK_ATTACK_SWITCH.size
return $back_attack = true if $game_switches[BACK_ATTACK_SWITCH[i]]
end
for i in 0...NO_BACK_ATTACK_SWITCH.size
return $back_attack = false if $game_switches[NON_BACK_ATTACK_SWITCH[i]]
end
for actor in $game_party.actors
return $back_attack = false if NON_BACK_ATTACK_WEAPONS.include?(actor.weapon_id)
return $back_attack = false if NON_BACK_ATTACK_ARMOR1.include?(actor.armor1_id)
return $back_attack = false if NON_BACK_ATTACK_ARMOR2.include?(actor.armor2_id)
return $back_attack = false if NON_BACK_ATTACK_ARMOR3.include?(actor.armor3_id)
return $back_attack = false if NON_BACK_ATTACK_ARMOR4.include?(actor.armor4_id)
for i in 0...NON_BACK_ATTACK_SKILLS.size
return $back_attack = false if actor.skill_id_learn?(NON_BACK_ATTACK_SKILLS[i])
end
end
end
#--------------------------------------------------------------------------
def special_preemptive_conditions
for i in 0...PREEMPTIVE_SWITCH.size
return $preemptive = true if $game_switches[PREEMPTIVE_SWITCH[i]]
end
for i in 0...NO_PREEMPTIVE_SWITCH.size
return $preemptive = false if $game_switches[NON_PREEMPTIVE_SWITCH[i]]
end
end
#--------------------------------------------------------------------------
def preemptive_plus
$preemptive_plus = false
for actor in $game_party.actors
return $preemptive_plus = true if PREEMPTIVE_WEAPONS.include?(actor.weapon_id)
return $preemptive_plus = true if PREEMPTIVE_ARMOR1.include?(actor.armor1_id)
return $preemptive_plus = true if PREEMPTIVE_ARMOR2.include?(actor.armor2_id)
return $preemptive_plus = true if PREEMPTIVE_ARMOR3.include?(actor.armor3_id)
return $preemptive_plus = true if PREEMPTIVE_ARMOR4.include?(actor.armor4_id)
for i in 0...PREEMPTIVE_SKILLS.size
return $preemptive_plus = true if actor.skill_id_learn?(PREEMPTIVE_SKILLS[i])
end
end
end
end
#==============================================================================
# ■ Spriteset_Battle
#==============================================================================
class Spriteset_Battle
#--------------------------------------------------------------------------
attr_reader :viewport1
attr_reader :viewport2
attr_accessor :actor_sprites
attr_accessor :enemy_sprites
#--------------------------------------------------------------------------
include N01
#--------------------------------------------------------------------------
def initialize
@viewport1 = Viewport.new(0, 0, 640, 480)
@viewport2 = Viewport.new(0, 0, 640, 480)
@viewport3 = Viewport.new(0, 0, 640, 480)
@viewport4 = Viewport.new(0, 0, 640, 480)
@viewport2.z = 101
@viewport3.z = 200
@viewport4.z = 5000
@battleback_sprite = Sprite.new(@viewport1)
@battleback_sprite.mirror = true if $back_attack && BACK_ATTACK_BATTLE_BACK_MIRROR
@enemy_sprites = []
for enemy in $game_troop.enemies
@enemy_sprites.push(Sprite_Battler.new(@viewport2, enemy))
end
@actor_sprites = []
for i in 0...$game_party.actors.size
@actor_sprites.push(Sprite_Battler.new(@viewport2, $game_party.actors[i]))
end
@weather = RPG::Weather.new(@viewport1)
@picture_sprites = []
for i in 51..100
@picture_sprites.push(Sprite_Picture.new(@viewport3, $game_screen.pictures[i]))
end
@timer_sprite = Sprite_Timer.new
update
end
#--------------------------------------------------------------------------
def update
if $game_party.actors.size > @actor_sprites.size
for i in @actor_sprites.size...$game_party.actors.size
@actor_sprites.push(Sprite_Battler.new(@viewport2, $game_party.actors[i]))
end
elsif @actor_sprites.size > $game_party.actors.size
for i in 0...@actor_sprites.size
@actor_sprites[i].dispose
end
@actor_sprites = []
for i in 0...$game_party.actors.size
@actor_sprites.push(Sprite_Battler.new(@viewport2, $game_party.actors[i]))
end
end
for i in 0...$game_party.actors.size
@actor_sprites[i].battler = $game_party.actors[i]
end
if @battleback_name != $game_temp.battleback_name
@battleback_name = $game_temp.battleback_name
if @battleback_sprite.bitmap != nil
@battleback_sprite.bitmap.dispose
end
@battleback_sprite.bitmap = RPG::Cache.battleback(@battleback_name)
@battleback_sprite.src_rect.set(0, 0, 640, 480)
end
for sprite in @enemy_sprites + @actor_sprites
sprite.update
end
@weather.type = $game_screen.weather_type
@weather.max = $game_screen.weather_max
@weather.update
for sprite in @picture_sprites
sprite.update
end
@timer_sprite.update
@viewport1.tone = $game_screen.tone
@viewport1.ox = $game_screen.shake
@viewport2.tone = $game_screen.tone
@viewport2.ox = $game_screen.shake
@viewport4.color = $game_screen.flash_color
@viewport1.update
@viewport2.update
@viewport4.update
end
#--------------------------------------------------------------------------
def set_damage_action(actor, index, action)
return if index.nil?
@actor_sprites[index].damage_action(action) if actor
@enemy_sprites[index].damage_action(action) unless actor
end
#--------------------------------------------------------------------------
def set_damage_pop(actor, index, damage)
return if index.nil?
@actor_sprites[index].damage_pop if actor
@enemy_sprites[index].damage_pop unless actor
end
#--------------------------------------------------------------------------
def set_target(actor, index, target)
return if index.nil?
@actor_sprites[index].get_target(target) if actor
@enemy_sprites[index].get_target(target) unless actor
end
#--------------------------------------------------------------------------
def set_action(actor, index, kind)
return if index.nil?
@actor_sprites[index].start_action(kind) if actor
@enemy_sprites[index].start_action(kind) unless actor
end
#--------------------------------------------------------------------------
def set_stand_by_action(actor, index)
return if index.nil?
@actor_sprites[index].push_stand_by if actor
@enemy_sprites[index].push_stand_by unless actor
end
end
#==============================================================================
# ■ Sprite_MoveAnime
#==============================================================================
class Sprite_MoveAnime < RPG::Sprite
#--------------------------------------------------------------------------
attr_accessor :battler
attr_accessor :base_x
attr_accessor :base_y
#--------------------------------------------------------------------------
def initialize(viewport,battler = nil)
super(viewport)
@battler = battler
self.visible = false
@base_x = 0
@base_y = 0
@move_x = 0
@move_y = 0
@moving_x = 0
@moving_y = 0
@orbit = 0
@orbit_plus = 0
@orbit_time = 0
@through = false
@finish = false
@time = 0
@angle = 0
@angling = 0
end
#--------------------------------------------------------------------------
def anime_action(id,mirror,distanse_x,distanse_y,type,speed,orbit,weapon,icon_index,icon_weapon)
@time = speed
@moving_x = distanse_x / speed
@moving_y = distanse_y / speed
@through = true if type == 1
@orbit_plus = orbit
@orbit_time = @time
if weapon != ""
action = ANIME[weapon].dup
@angle = action[0]
end_angle = action[1]
time = action[2]
@angling = (end_angle - @angle)/ time
self.angle = @angle
self.mirror = mirror
if icon_weapon
self.bitmap = RPG::Cache.icon(icon_index)
self.ox = 12
self.oy = 12
else
self.bitmap = RPG::Cache.character(icon_index, 0)
self.ox = self.bitmap.width / 2
self.oy = self.bitmap.height / 2
end
self.visible = true
self.z = 1000
end
self.x = @base_x + @move_x
self.y = @base_y + @move_y + @orbit
if id != 0 && !icon_weapon
animation($data_animations[id],true)
elsif id != 0 && icon_weapon
loop_animation($data_animations[id])
end
end
#--------------------------------------------------------------------------
def action_reset
@moving_x = @moving_y = @move_x = @move_y = @base_x = @base_y = @orbit = 0
@orbit_time = @angling = @angle = 0
@through = self.visible = @finish = false
dispose_animation
end
#--------------------------------------------------------------------------
def finish?
return @finish
end
#--------------------------------------------------------------------------
def update
super
@time -= 1
if @time >= 0
@move_x += @moving_x
@move_y += @moving_y
if @time < @orbit_time / 2
@orbit_plus = @orbit_plus * 5 / 4
elsif @time == @orbit_time / 2
@orbit_plus *= -1
else
@orbit_plus = @orbit_plus * 2 / 3
end
@orbit += @orbit_plus
end
@time = 100 if @time < 0 && @through
@finish = true if @time < 0 && !@through
self.x = @base_x + @move_x
self.y = @base_y + @move_y + @orbit
if self.x < -200 or self.x > 840 or self.y < -200 or self.y > 680
@finish = true
end
if self.visible
@angle += @angling
self.angle = @angle
end
end
end
#==============================================================================
# ■ Sprite_Weapon
#==============================================================================
class Sprite_Weapon < RPG::Sprite
#--------------------------------------------------------------------------
include N01
#--------------------------------------------------------------------------
attr_accessor :battler
#--------------------------------------------------------------------------
def initialize(viewport,battler = nil)
super(viewport)
@battler = battler
@action = []
@move_x = 0
@move_y = 0
@move_z = 0
@plus_x = 0
@plus_y = 0
@angle = 0
@zoom_x = 1
@zoom_y = 1
@moving_x = 0
@moving_y = 0
@angling = 0
@zooming_x = 1
@zooming_y = 1
@freeze = -1
@mirroring = false
@time = ANIME_PATTERN + 1
weapon_graphics
end
#--------------------------------------------------------------------------
def dispose
self.bitmap.dispose if self.bitmap != nil
super
end
#--------------------------------------------------------------------------
def weapon_graphics(left = false)
if @battler.actor?
weapon = @battler.weapons[0] unless left
weapon = @battler.weapons[1] if left
else
weapon = $data_weapons[@battler.weapon]
@mirroring = true if @battler.action_mirror
end
return if weapon == nil
if weapon.graphic == ""
self.bitmap = RPG::Cache.icon(weapon.icon_name)
@weapon_width = @weapon_height = 24
else
self.bitmap = RPG::Cache.icon(weapon.graphic)
@weapon_width = self.bitmap.width
@weapon_height = self.bitmap.height
end
end
#--------------------------------------------------------------------------
def freeze(action)
@freeze = action
end
#--------------------------------------------------------------------------
def weapon_action(action,loop)
if action == ""
self.visible = false
elsif @weapon_id == 0
self.visible = false
else
@action = ANIME[action]
act0 = @action[0]
act1 = @action[1]
act2 = @action[2]
act3 = @action[3]
act4 = @action[4]
act5 = @action[5]
act6 = @action[6]
act7 = @action[7]
act8 = @action[8]
act9 = @action[9]
act10 = @action[10]
if @mirroring
act0 *= -1
act3 *= -1
act4 *= -1
act9 *= -1
end
if $back_attack && BACK_ATTACK
act0 *= -1
act3 *= -1
act4 *= -1
act9 *= -1
end
time = ANIME_PATTERN
if act2
self.z = @battler.position_z + 1
else
self.z = @battler.position_z - 1
end
if act6
if self.mirror
self.mirror = false
else
self.mirror = true
end
end
if @mirroring
if self.mirror
self.mirror = false
else
self.mirror = true
end
end
if $back_attack && BACK_ATTACK
if self.mirror
self.mirror = false
else
self.mirror = true
end
end
@moving_x = act0 / time
@moving_y = act1 / time
@angle = act3
self.angle = @angle
@angling = (act4 - act3)/ time
@angle += (act4 - act3) % time
@zooming_x = (1 - act7) / time
@zooming_y = (1 - act8) / time
if self.mirror
case act5
when 1
act5 = 2
when 2
act5 = 1
when 3
act5 = 4
when 4
act5 = 3
end
end
case act5
when 0
self.ox = @weapon_width / 2
self.oy = @weapon_height / 2
when 1
self.ox = 0
self.oy = 0
when 2
self.ox = @weapon_width
self.oy = 0
when 3
self.ox = 0
self.oy = @weapon_height
when 4
self.ox = @weapon_width
self.oy = @weapon_height
end
@plus_x = act9
@plus_y = act10
@loop = true if loop == 0
@angle -= @angling
@zoom_x -= @zooming_x
@zoom_y -= @zooming_y
@move_x -= @moving_x
@move_y -= @moving_y
@move_z = 1000 if act2
if @freeze != -1
for i in 0..@freeze + 1
@angle += @angling
@zoom_x += @zooming_x
@zoom_y += @zooming_y
@move_x += @moving_x
@move_y += @moving_y
end
@angling = 0
@zooming_x = 0
@zooming_y = 0
@moving_x = 0
@moving_y = 0
end
self.visible = true
end
end
#--------------------------------------------------------------------------
def action_reset
@moving_x = @moving_y = @move_x = @move_y = @plus_x = @plus_y = 0
@angling = @zooming_x = @zooming_y = @angle = self.angle = @move_z = 0
@zoom_x = @zoom_y = self.zoom_x = self.zoom_y = 1
self.mirror = self.visible = @loop = false
@freeze = -1
@action = []
@time = ANIME_PATTERN + 1
end
#--------------------------------------------------------------------------
def action_loop
@angling *= -1
@zooming_x *= -1
@zooming_y *= -1
@moving_x *= -1
@moving_y *= -1
end
#--------------------------------------------------------------------------
def mirroring
return @mirroring = false if @mirroring
@mirroring = true
end
#--------------------------------------------------------------------------
def action
return if @time <= 0
@time -= 1
@angle += @angling
@zoom_x += @zooming_x
@zoom_y += @zooming_y
@move_x += @moving_x
@move_y += @moving_y
if @loop && @time == 0
@time = ANIME_PATTERN + 1
action_loop
end
end
#--------------------------------------------------------------------------
def update
super
self.angle = @angle
self.zoom_x = @zoom_x
self.zoom_y = @zoom_y
self.x = @battler.position_x + @move_x + @plus_x
self.y = @battler.position_y + @move_y + @plus_y
self.z = @battler.position_z + @move_z - 1
end
end
#==============================================================================
# Game_Party
#==============================================================================
class Game_Party
#--------------------------------------------------------------------------
include N01
#--------------------------------------------------------------------------
def add_actor(actor_id)
actor = $game_actors[actor_id]
if @actors.size < MAX_MEMBER and not @actors.include?(actor)
@actors.push(actor)
$game_player.refresh
end
end
end
#==============================================================================
# ■ RPG::Weapon
#==============================================================================
class RPG::Weapon
#--------------------------------------------------------------------------
def magic?
return false
end
end
#==============================================================================
# ■ RPG::Skill
#==============================================================================
class RPG::Skill
#--------------------------------------------------------------------------
def magic?
return @atk_f == 0 ? true : false
end
end
#==============================================================================
# ■ RPG::Item
#==============================================================================
class RPG::Item
#--------------------------------------------------------------------------
def magic?
return false
end
end
#==============================================================================
# ■ RPG::Cache
#==============================================================================
module RPG::Cache
def self.faces(filename, hue = 0)
self.load_bitmap('Graphics/Faces/', filename, hue)
end
end
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
include N01
#--------------------------------------------------------------------------
attr_accessor :sp_damage
attr_accessor :collapse
attr_accessor :move_x
attr_accessor :move_y
attr_accessor :move_z
attr_accessor :jump
attr_accessor :active
attr_accessor :non_dead
attr_accessor :slip_damage
attr_accessor :derivation
attr_accessor :individual
attr_accessor :play
attr_accessor :force_action
attr_accessor :force_target
attr_accessor :revival
attr_accessor :reflex
attr_accessor :absorb
attr_accessor :anime_mirror
attr_accessor :dying
attr_accessor :state_animation_id
attr_accessor :dead_anim
attr_accessor :missed
attr_accessor :evaded
attr_accessor :true_immortal
attr_accessor :defense_pose
attr_reader :base_position_x
attr_reader :base_position_y
attr_reader :base_height
#--------------------------------------------------------------------------
alias initialize_n01 initialize
def initialize
initialize_n01
@move_x = @move_y = @move_z = @plus_y = @jump = @derivation = @act_time = 0
@force_action = @force_target = @base_position_x = @base_position_y = 0
@absorb = @play = @now_state = @state_frame = @state_animation_id = 0
@active = @non_dead = @individual = @slip_damage = @revival = false
@collapse = @sp_damage = @anime_mirror = @dying = false
@evaded = @missed = false
@anim_states = []
end
#--------------------------------------------------------------------------
def state_id
return @states[@states.size - 1]
end
#--------------------------------------------------------------------------
def in_danger
return @hp <= self.maxhp / 4
end
#--------------------------------------------------------------------------
def battler_states
bat_states = []
for i in self.states
bat_states.push($data_states[i])
end
return bat_states
end
#--------------------------------------------------------------------------
def apply_variance(damage, variance)
if damage != 0
amp = [damage.abs * variance / 100, 0].max
damage += rand(amp+1) + rand(amp+1) - amp
end
return damage
end
#--------------------------------------------------------------------------
def state_animation_id
return 0 if @states.empty?
return 0 if @states.include?(1)
@state_frame -= 1 if @state_frame > 0
return @state_animation_id if @state_frame > 0
if @anim_states.empty?
for state in @states
@anim_states << state if $data_states[state].animation_id > 0
end
end
now_state = @anim_states.shift
return 0 if now_state.nil?
@state_animation_id = $data_states[now_state].animation_id
return 0 if $data_animations[@state_animation_id].nil?
@state_frame = $data_animations[@state_animation_id].frame_max * STATE_CYCLE_TIME * 2
return @state_animation_id
end
#--------------------------------------------------------------------------
def skill_can_use?(skill_id)
skill = $data_skills[skill_id]
if skill.extension.include?("CONSUMEHP")
return false if calc_sp_cost(self, skill) >= self.hp
else
return false if calc_sp_cost(self, skill) > self.sp
end
return false if dead?
return false if skill.atk_f == 0 and self.restriction == 1
occasion = skill.occasion
return (occasion == 0 or occasion == 1) if $game_temp.in_battle
return (occasion == 0 or occasion == 2)
end
#--------------------------------------------------------------------------
def calc_sp_cost(user, skill)
cost = skill.sp_cost
if skill.extension.include?("%COSTMAX")
return user.maxhp * cost / 100 if skill.extension.include?("CONSUMEHP")
return user.maxsp * cost / 100
elsif skill.extension.include?("%COSTNOW")
return user.hp * cost / 100 if skill.extension.include?("CONSUMEHP")
return user.sp * cost / 100
end
return cost
end
#--------------------------------------------------------------------------
def consum_skill_cost(skill)
return false unless skill_can_use?(skill.id)
cost = calc_sp_cost(self, skill)
return self.hp -= cost if skill.extension.include?("CONSUMEHP")
return self.sp -= cost
end
#--------------------------------------------------------------------------
def attack_effect(attacker)
self.critical = @evaded = @missed = false
hit_result = (rand(100) < attacker.hit)
set_attack_result(attacker) if hit_result
weapon = attacker.actor? ? $data_weapons[attacker.weapon_id] : nil
if hit_result
set_attack_state_change(attacker)
else
self.critical = false
@missed = true
end
self.damage = POP_EVA if @evaded
self.damage = POP_MISS if @missed
return true
end
#--------------------------------------------------------------------------
def perfect_attack_effect(attacker)
self.critical = @evaded = @missed = false
set_attack_result(attacker)
weapon = attacker.actor? ? $data_weapons[attacker.weapon_id] : nil
set_attack_state_change(attacker)
return true
end
#--------------------------------------------------------------------------
def set_attack_result(attacker)
set_attack_damage_value(attacker)
if self.damage > 0
self.damage /= 2 if self.guarding?
set_attack_critical(attacker)
set_critical_damage(attacker) if self.critical
end
apply_variance(15) if self.damage.abs > 0
set_attack_hit_value(attacker)
end
#--------------------------------------------------------------------------
def set_attack_damage_value(attacker)
case DAMAGE_ALGORITHM_TYPE
when 0
atk = [attacker.atk - (self.pdef / 2), 0].max
str = [20 + attacker.str, 0].max
when 1
atk = [attacker.atk - ((attacker.atk * self.pdef) / 1000), 0].max
str = [20 + attacker.str, 0].max
when 2
atk = 20
str = [(attacker.str * 4) - (self.dex * 2) , 0].max
when 3
atk = [(10 + attacker.atk) - (self.pdef / 2), 0].max
str = [(20 + attacker.str) - (self.dex / 2), 0].max
end
self.damage = atk * str / 20
self.damage = 1 if self.damage == 0 and (rand(100) > 40)
self.damage *= elements_correct(attacker.element_set)
self.damage /= 100
end
#--------------------------------------------------------------------------
def apply_variance(variance)
amp = [self.damage.abs * variance / 100, 1].max
self.damage += rand(amp + 1) + rand(amp + 1) - amp
end
#--------------------------------------------------------------------------
def set_attack_hit_value(attacker)
atk_hit = DAMAGE_ALGORITHM_TYPE > 1 ? attacker.agi : attacker.dex
eva = (8 * self.agi / atk_hit) + self.eva
hit = self.damage < 0 ? 100 : 100 - eva
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
@evaded = true unless hit_result
end
#--------------------------------------------------------------------------
def set_attack_critical(attacker)
atk_crt = DAMAGE_ALGORITHM_TYPE > 1 ? attacker.agi : attacker.dex
self.critical = rand(100) < 5 * atk_crt / self.agi
end
#--------------------------------------------------------------------------
def set_critical_damage(attacker)
self.damage += self.damage
end
#--------------------------------------------------------------------------
def set_attack_state_change(attacker)
remove_states_shock
effective = apply_damage(attacker)
@state_changed = false
states_plus(attacker.plus_state_set)
states_minus(attacker.minus_state_set)
return effective
end
#--------------------------------------------------------------------------
def skill_effect(user, skill)
self.critical = @evaded = @missed = false
if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
return false
end
effective = false
effective |= skill.common_event_id > 0
hit = skill.hit
hit *= set_skill_hit(user, skill)
hit_result = (rand(100) < hit)
effective |= hit < 100
effective |= set_skill_result(user, skill, effective) if hit_result
if hit_result
effective |= set_skill_state_change(user, skill, effective)
else
@missed = true unless @evaded
end
self.damage = nil unless $game_temp.in_battle
self.damage = POP_EVA if @evaded
self.damage = POP_MISS if @missed
return effective
end
#--------------------------------------------------------------------------
def perfect_skill_effect(user, skill)
self.critical = @evaded = @missed = false
if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
return false
end
effective = false
effective |= skill.common_event_id > 0
effective |= set_skill_result(user, skill, effective)
effective |= set_skill_state_change(user, skill, effective)
self.damage = nil unless $game_temp.in_battle
return effective
end
#--------------------------------------------------------------------------
def set_skill_hit(user, skill)
if skill.magic?
return 1
else
return user.hit / 100
end
end
#--------------------------------------------------------------------------
def set_skill_result(user, skill, effective)
set_skill_damage_value(user, skill)
if self.damage > 0
self.damage /= 2 if self.guarding?
end
apply_variance(skill.variance) if skill.variance > 0 and self.damage.abs > 0
effective |= set_skill_hit_value(user, skill, effective)
return effective
end
#--------------------------------------------------------------------------
def set_skill_damage_value(user, skill)
power = set_skill_power(user, skill)
if power > 0
case DAMAGE_ALGORITHM_TYPE
when 0,3
power -= (self.pdef * skill.pdef_f) / 200
power -= (self.mdef * skill.mdef_f) / 200
when 1
power -= (power * (self.pdef * skill.pdef_f)) / 100000
power -= (power * (self.mdef * skill.mdef_f)) / 100000
when 2
power -= ((self.dex * 2 * skill.pdef_f) / 100)
power -= ((self.int * 1 * skill.mdef_f) / 100)
end
power = [power, 0].max
end
rate = set_skill_rate(user, skill) unless DAMAGE_ALGORITHM_TYPE == 2
rate = [rate, 0].max
self.damage = power * rate / 20
self.damage *= elements_correct(skill.element_set)
self.damage /= 100
end
#--------------------------------------------------------------------------
def set_skill_power(user, skill)
case DAMAGE_ALGORITHM_TYPE
when 0,1,3
power = skill.power + ((user.atk * skill.atk_f) / 100)
when 2
user_str = (user.str * 4 * skill.str_f / 100)
user_int = (user.int * 2 * skill.int_f / 100)
if skill.power > 0
power = skill.power + user_str + user_int
else
power = skill.power - user_str - user_int
end
end
return power
end
#--------------------------------------------------------------------------
def set_skill_rate(user, skill)
case DAMAGE_ALGORITHM_TYPE
when 0,1,2
rate = 20
when 3
rate = 40
rate -= (self.dex / 2 * skill.pdef_f / 200)
rate -= ((self.dex + self.int)/ 4 * skill.mdef_f / 200)
end
rate += (user.str * skill.str_f / 100)
rate += (user.dex * skill.dex_f / 100)
rate += (user.agi * skill.agi_f / 100)
rate += (user.int * skill.int_f / 100)
return rate
end
#--------------------------------------------------------------------------
def set_skill_hit_value(user, skill, effective)
atk_hit = DAMAGE_ALGORITHM_TYPE > 1 ? user.agi : user.dex
eva = 8 * self.agi / atk_hit + self.eva
hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
@evaded = true unless hit_result
effective |= hit < 100
return effective
end
#--------------------------------------------------------------------------
def set_skill_state_change(user, skill, effective = false)
if skill.power != 0 and not skill.magic?
remove_states_shock
effective = true
end
effective |= apply_damage(user)
@state_changed = false
effective |= states_plus(skill.plus_state_set)
effective |= states_minus(skill.minus_state_set)
if skill.power == 0
self.damage = ""
@missed = true unless @state_changed
end
return effective
end
#--------------------------------------------------------------------------
def apply_damage(user)
return true if @evaded or @missed or not self.damage.is_a?(Numeric)
if self.sp_damage
last_sp = self.sp
self.sp -= self.damage
effective = self.sp != last_sp
else
last_hp = self.hp
self.hp -= self.damage
effective = self.hp != last_hp
end
return effective
end
#--------------------------------------------------------------------------
def item_effect(item)
self.critical = @evaded = @missed = false
if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or
((item.scope == 5 or item.scope == 6) and self.hp >= 1)
return false
end
effective = false
effective |= item.common_event_id > 0
hit_result = (rand(100) < item.hit)
@missed = true unless hit_result
effective |= item.hit < 100
if hit_result == true
effective |= make_item_damage_value(item)
else
@missed = true
end
self.damage = nil unless $game_temp.in_battle
self.damage = POP_MISS if @missed
return effective
end
#--------------------------------------------------------------------------
def perfect_item_effect(item)
self.critical = @evaded = @missed = false
if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or
((item.scope == 5 or item.scope == 6) and self.hp >= 1)
return false
end
effective = false
effective |= item.common_event_id > 0
effective |= item.hit < 100
effective |= make_item_damage_value(item)
self.damage = nil unless $game_temp.in_battle
self.damage = POP_MISS if @missed
return effective
end
#--------------------------------------------------------------------------
def make_item_damage_value(item)
recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp
recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp
if recover_hp < 0
recover_hp += self.pdef * item.pdef_f / 20
recover_hp += self.mdef * item.mdef_f / 20
recover_hp = [recover_hp, 0].min
end
recover_hp *= elements_correct(item.element_set)
recover_hp /= 100
recover_sp *= elements_correct(item.element_set)
recover_sp /= 100
if item.variance > 0 and recover_hp.abs > 0
amp = [recover_hp.abs * item.variance / 100, 1].max
recover_hp += rand(amp+1) + rand(amp+1) - amp
end
if item.variance > 0 and recover_sp.abs > 0
amp = [recover_sp.abs * item.variance / 100, 1].max
recover_sp += rand(amp+1) + rand(amp+1) - amp
end
recover_hp /= 2 if recover_hp < 0 and self.guarding?
self.damage = -recover_hp
last_hp = self.hp
last_sp = self.sp
self.hp += recover_hp
self.sp += recover_sp
effective |= self.hp != last_hp
effective |= self.sp != last_sp
@state_changed = false
effective |= states_plus(item.plus_state_set)
effective |= states_minus(item.minus_state_set)
if item.parameter_type > 0 and item.parameter_points != 0
case item.parameter_type
when 1
@maxhp_plus += item.parameter_points
when 2
@maxsp_plus += item.parameter_points
when 3
@str_plus += item.parameter_points
when 4
@dex_plus += item.parameter_points
when 5
@agi_plus += item.parameter_points
when 6
@int_plus += item.parameter_points
end
effective = true
end
if item.recover_hp_rate == 0 and item.recover_hp == 0
self.damage = ""
if item.recover_sp_rate == 0 and item.recover_sp == 0 and
(item.parameter_type == 0 or item.parameter_points == 0)
unless @state_changed
@missed = true
end
end
end
return effective
end
#--------------------------------------------------------------------------
alias skill_effect_n01 skill_effect
def skill_effect(user, skill)
now_hp = self.hp
if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
return false
end
effective = skill_effect_n01(user, skill)
return if effective == false
check_extension(skill)
if @ratio_maxdamage != nil
self.damage = self.maxhp * @ratio_maxdamage / 100 unless @sp_damage
self.damage = self.maxsp * @ratio_maxdamage / 100 if @sp_damage
end
if @ratio_nowdamage != nil
self.damage = self.hp * @ratio_nowdamage / 100 unless @sp_damage
self.damage = self.sp * @ratio_nowdamage / 100 if @sp_damage
end
if @cost_damage
cost = calc_sp_cost(user, skill)
if skill.extension.include?("CONSUMEHP")
self.damage = self.damage * cost / user.maxhp
else
self.damage = self.damage * cost / user.maxsp
end
end
self.damage = self.damage * user.hp / user.maxhp if @nowhp_damage
self.damage = self.damage * user.sp / user.maxsp if @nowsp_damage
if @sp_damage
self.hp = now_hp
self.sp -= self.damage
elsif @extension
self.hp = now_hp
self.hp -= self.damage
end
return true
end
#--------------------------------------------------------------------------
alias perfect_skill_effect_n01 perfect_skill_effect
def perfect_skill_effect(user, skill)
now_hp = self.hp
if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
return false
end
effective = perfect_skill_effect_n01(user, skill)
return if effective == false
check_extension(skill)
if @ratio_maxdamage != nil
self.damage = self.maxhp * @ratio_maxdamage / 100 unless @sp_damage
self.damage = self.maxsp * @ratio_maxdamage / 100 if @sp_damage
end
if @ratio_nowdamage != nil
self.damage = self.hp * @ratio_nowdamage / 100 unless @sp_damage
self.damage = self.sp * @ratio_nowdamage / 100 if @sp_damage
end
if @cost_damage
cost = calc_sp_cost(user, skill)
if skill.extension.include?("CONSUMEHP")
self.damage = self.damage * cost / user.maxhp
else
self.damage = self.damage * cost / user.maxsp
end
end
self.damage = self.damage * user.hp / user.maxhp if @nowhp_damage
self.damage = self.damage * user.sp / user.maxsp if @nowsp_damage
if @sp_damage
self.hp = now_hp
self.sp -= self.damage
elsif @extension
self.hp = now_hp
self.hp -= self.damage
end
return true
end
#--------------------------------------------------------------------------
def check_extension(skill)
@extension = false
@sp_damage = false
@cost_damage = false
@nowhp_damage = false
@nowsp_damage = false
@ratio_maxdamage = nil
@ratio_nowdamage = nil
for ext in skill.extension
break if self.damage == "Errou!" or self.damage == "" or self.damage == 0
if ext == "SPDAMAGE"
next @sp_damage = true
elsif ext == "COSTPOWER"
@extension = true
next @cost_damage = true
elsif ext == "HPNOWPOWER"
@extension = true
next @nowhp_damage = true
elsif ext == "MPNOWPOWER"
@extension = true
next @nowsp_damage = true
else
name = ext.split('')
if name[7] == "M"
name = name.join
name.slice!("%DAMAGEMAX/")
@extension = true
next @ratio_maxdamage = name.to_i
elsif name[7] == "N"
name = name.join
name.slice!("%DAMAGENOW/")
@extension = true
next @ratio_nowdamage = name.to_i
end
end
end
end
#--------------------------------------------------------------------------
def change_base_position(x, y)
@base_position_x = x
@base_position_y = y
end
#--------------------------------------------------------------------------
def reset_coordinate
@move_x = @move_y = @move_z = @jump = @derivation = 0
@active = @non_dead = @individual = false
end
end
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
attr_reader :armor5_id
attr_reader :armor6_id
attr_reader :armor7_id
attr_accessor :actor_height
attr_accessor :two_swords_change
#--------------------------------------------------------------------------
include N01
#--------------------------------------------------------------------------
def actor?
return true
end
#--------------------------------------------------------------------------
def weapons
return [$data_weapons[@weapon_id]]
end
#--------------------------------------------------------------------------
def armors
result = []
result << $data_armors[@armor1_id]
result << $data_armors[@armor2_id]
result << $data_armors[@armor3_id]
result << $data_armors[@armor4_id]
return result
end
#--------------------------------------------------------------------------
def equips
return weapons + armors
end
#--------------------------------------------------------------------------
def skill_id_learn?(skill_id)
return @skills.include?(skill_id)
end
#--------------------------------------------------------------------------
def exp=(exp)
@exp = [exp, 0].max
while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0
@level += 1
for j in $data_classes[@class_id].learnings
if j.level == @level
learn_skill(j.skill_id)
end
end
end
while @exp < @exp_list[@level]
@level -= 1
end
@hp = [@hp, self.maxhp].min
@sp = [@sp, self.maxsp].min
end
#--------------------------------------------------------------------------
def base_atk
n = 0
for item in weapons.compact do n += item.atk end
n = UNARMED_ATTACK if weapons[0] == nil and weapons[1] == nil
return n
end
#--------------------------------------------------------------------------
def base_pdef
n = 0
for item in equips.compact do n += item.pdef end
return n
end
#--------------------------------------------------------------------------
def base_mdef
n = 0
for item in equips.compact do n += item.mdef end
return n
end
#--------------------------------------------------------------------------
def base_eva
n = 0
for item in armors.compact do n += item.eva end
return n
end
#--------------------------------------------------------------------------
def graphic_change(character_name)
@character_name = character_name
end
#--------------------------------------------------------------------------
def perform_collapse
$game_system.se_play($data_system.actor_collapse_se) if $game_temp.in_battle and dead?
end
#--------------------------------------------------------------------------
def base_position
base = ACTOR_POSITION[self.index]
@base_position_x = base[0]
@base_position_y = base[1]
@base_position_x = 640 - base[0] if $back_attack and BACK_ATTACK_MIRROR
end
#--------------------------------------------------------------------------
def actor_height
@base_height = 0 if CURSOR_TYPE != 1
@base_height = 72 if CURSOR_TYPE == 1
return @base_height
end
#--------------------------------------------------------------------------
def position_x
return 0 if self.index == nil
return @base_position_x + @move_x
end
#--------------------------------------------------------------------------
def position_y
return 0 if self.index == nil
return @base_position_y + @move_y + @jump
end
#--------------------------------------------------------------------------
def position_z
return 0 if self.index == nil
return position_y + @move_z - @jump + 200
end
end
#==============================================================================
# ■ Game_Enemy
#==============================================================================
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
include N01
#--------------------------------------------------------------------------
attr_accessor :adj_speed
attr_accessor :act_time
#--------------------------------------------------------------------------
def actor?
return false
end
#--------------------------------------------------------------------------
def make_action_speed2(adj)
@adj_speed = @current_action.speed if @adj_speed == nil
@adj_speed = @adj_speed * adj / 100
end
#--------------------------------------------------------------------------
def perform_collapse
@force_action = ["N01collapse"] if $game_temp.in_battle and dead?
end
#--------------------------------------------------------------------------
def element_set2
return []
end
#--------------------------------------------------------------------------
def base_position
return if self.index == nil
bitmap = Bitmap.new("Graphics/Battlers/" + @battler_name) if !self.anime_on
bitmap = Bitmap.new("Graphics/Characters/" + @battler_name) if self.anime_on && WALK_ANIME
bitmap = Bitmap.new("Graphics/Characters/" + @battler_name + "_1") if self.anime_on && !WALK_ANIME
height = bitmap.height
@base_position_x = self.screen_x + self.position_plus[0]
@base_position_y = self.screen_y + self.position_plus[1] - height / 3 + 32
@base_position_x = 640 - self.screen_x - self.position_plus[0] if $back_attack and BACK_ATTACK_MIRROR
@base_height = 0 if CURSOR_TYPE == 0
@base_height = height / 3 + 64 if CURSOR_TYPE == 1 if !self.anime_on
@base_height = height /12 + 64 if CURSOR_TYPE == 1 if self.anime_on
@base_height = -(height / 3) if CURSOR_TYPE == 2 if !self.anime_on
@base_height = -(height /12) if CURSOR_TYPE == 2 if self.anime_on
bitmap.dispose
end
#--------------------------------------------------------------------------
def enemy_height
return @base_height
end
#--------------------------------------------------------------------------
def position_x
return @base_position_x - @move_x
end
#--------------------------------------------------------------------------
def position_y
return @base_position_y + @move_y + @jump
end
#--------------------------------------------------------------------------
def position_z
return position_y + @move_z - @jump + 200
end
end
#==============================================================================
# Arrow_Base
#==============================================================================
class Arrow_Base < Sprite
#--------------------------------------------------------------------------
include N01
#--------------------------------------------------------------------------
def update_multi_arrow
return if @arrows == nil or @arrows == []
for i in 0...@arrows.size
@blink_count = (@blink_count + 1) % 40
if @blink_count < 20
@arrows[i].src_rect.set(128, 96, 32, 32) if @arrows[i] != nil
else
@arrows[i].src_rect.set(160, 96, 32, 32) if @arrows[i] != nil
end
end
end
#--------------------------------------------------------------------------
def dispose_multi_arrow
for i in 0...@arrows.size
@arrows[i].dispose if @arrows[i] != nil
end
end
end
#==============================================================================
# Arrow_Enemy_All
#==============================================================================
class Arrow_Enemy_All < Arrow_Base
#--------------------------------------------------------------------------
def initialize(viewport)
super(viewport)
@arrows = []
for battler in $game_troop.enemies
if battler.exist?
@arrows[battler.index] = Arrow_Enemy.new(viewport)
@arrows[battler.index].index = battler.index
end
end
end
#--------------------------------------------------------------------------
def update_multi_arrow
super
for i in 0...@arrows.size
enemy = $game_troop.enemies[i]
if enemy != nil && @arrows[i] != nil && @arrows[i].enemy != nil
@arrows[i].x = @arrows[i].enemy.position_x + CURSOR_POSITION[0]
@arrows[i].y = @arrows[i].enemy.position_y + CURSOR_POSITION[1] + enemy.enemy_height
end
end
end
end
#==============================================================================
# Arrow_Actor_All
#==============================================================================
class Arrow_Actor_All < Arrow_Base
#--------------------------------------------------------------------------
def initialize(viewport)
super(viewport)
@arrows = []
for battler in $game_party.actors
if battler.exist?
@arrows[battler.index] = Arrow_Actor.new(viewport)
@arrows[battler.index].index = battler.index
end
end
end
#--------------------------------------------------------------------------
def update_multi_arrow
super
for i in 0...@arrows.size
actor = $game_party.actors[i]
if actor != nil && @arrows[i] != nil && @arrows[i].actor != nil
@arrows[i].x = @arrows[i].actor.position_x + CURSOR_POSITION[0]
@arrows[i].y = @arrows[i].actor.position_y + CURSOR_POSITION[1] + actor.actor_height
end
end
end
end
#==============================================================================
# Arrow_Battler_All
#==============================================================================
class Arrow_Battler_All < Arrow_Base
#--------------------------------------------------------------------------
def initialize(viewport)
super(viewport)
@arrows = []
s = 0
for battler in $game_party.actors + $game_troop.enemies
@arrows[s] = Arrow_Actor.new(viewport) if battler.actor?
@arrows[s] = Arrow_Enemy.new(viewport) if battler.is_a?(Game_Enemy)
@arrows[s].index = battler.index
s += 1
end
end
#--------------------------------------------------------------------------
def update_multi_arrow
super
s = 0
for i in 0...@arrows.size
if @arrows[i].is_a?(Arrow_Actor)
actor = $game_party.actors[i]
if @arrows[i].actor != nil
@arrows[i].x = @arrows[i].actor.position_x + CURSOR_POSITION[0]
@arrows[i].y = @arrows[i].actor.position_y + CURSOR_POSITION[1] + actor.actor_height
s += 1
end
elsif @arrows[i].is_a?(Arrow_Enemy)
enemy = $game_troop.enemies[i - s]
if @arrows[i].enemy != nil or @arrows[i] != nil
@arrows[i].x = @arrows[i].enemy.position_x + CURSOR_POSITION[0]
@arrows[i].y = @arrows[i].enemy.position_y + CURSOR_POSITION[1] + enemy.enemy_height
end
end
end
end
end
#==============================================================================
# ■ Arrow_Enemy
#==============================================================================
class Arrow_Enemy < Arrow_Base
#--------------------------------------------------------------------------
def update
super
$game_troop.enemies.size.times do
break if self.enemy.exist?
@index += 1
@index %= $game_troop.enemies.size
end
if Input.repeat?(Input::RIGHT)
cursor_up if $back_attack
cursor_down unless $back_attack
end
if Input.repeat?(Input::LEFT)
cursor_up unless $back_attack
cursor_down if $back_attack
end
if Input.repeat?(Input::UP)
cursor_down
end
if Input.repeat?(Input::DOWN)
cursor_up
end
if self.enemy != nil
self.x = self.enemy.position_x + CURSOR_POSITION[0]
self.y = self.enemy.position_y + CURSOR_POSITION[1] + enemy.enemy_height
end
end
#--------------------------------------------------------------------------
def cursor_up
$game_system.se_play($data_system.cursor_se)
$game_troop.enemies.size.times do
@index += $game_troop.enemies.size - 1
@index %= $game_troop.enemies.size
break if self.enemy.exist?
end
end
#--------------------------------------------------------------------------
def cursor_down
$game_system.se_play($data_system.cursor_se)
$game_troop.enemies.size.times do
@index += 1
@index %= $game_troop.enemies.size
break if self.enemy.exist?
end
end
end
#==============================================================================
# ■ Arrow_Actor
#==============================================================================
class Arrow_Actor < Arrow_Base
#--------------------------------------------------------------------------
def update
super
if Input.repeat?(Input::RIGHT)
cursor_up if $back_attack
cursor_down unless $back_attack
end
if Input.repeat?(Input::LEFT)
cursor_up unless $back_attack
cursor_down if $back_attack
end
if Input.repeat?(Input::UP)
cursor_up
end
if Input.repeat?(Input::DOWN)
cursor_down
end
if self.actor != nil
self.x = self.actor.position_x + CURSOR_POSITION[0]
self.y = self.actor.position_y + CURSOR_POSITION[1] + actor.actor_height
end
end
#--------------------------------------------------------------------------
def cursor_up
$game_system.se_play($data_system.cursor_se)
@index += $game_party.actors.size - 1
@index %= $game_party.actors.size
end
#--------------------------------------------------------------------------
def cursor_down
$game_system.se_play($data_system.cursor_se)
@index += 1
@index %= $game_party.actors.size
end
#--------------------------------------------------------------------------
def input_right
@index += 1
@index %= $game_party.actors.size
end
#--------------------------------------------------------------------------
def input_update_target
if Input.repeat?(Input::RIGHT)
if @index == self.actor.index
cursor_up if $back_attack
cursor_down unless $back_attack
end
end
if Input.repeat?(Input::LEFT)
if @index == self.actor.index
cursor_up unless $back_attack
cursor_down if $back_attack
end
end
if Input.repeat?(Input::UP)
cursor_up if @index == self.actor.index
end
if Input.repeat?(Input::DOWN)
cursor_down if @index == self.actor.index
end
if self.actor != nil
self.x = self.actor.screen_x
self.y = self.actor.screen_y
end
end
end
#==============================================================================
# ■ Game_Troop
#==============================================================================
class Game_Troop
def clear_actions
for enemies in @enemies
enemies.current_action.clear
end
end
end
#==============================================================================
# ■ Window_Command
#==============================================================================
class Window_Command < Window_Selectable
#--------------------------------------------------------------------------
attr_accessor :commands
end
#==============================================================================
# ■ Window_Base
#==============================================================================
class Window_Base < Window
#--------------------------------------------------------------------------
include N01
#--------------------------------------------------------------------------
def draw_actor_state(actor, x, y, width = 0)
status_icon = []
for i in actor.states
if $data_states[i].rating >= 1
begin
status_icon.push(RPG::Cache.icon($data_states[i].name + "_st"))
break if status_icon.size > (Icon_max - 1)
rescue
end
end
end
for icon in status_icon
self.contents.blt(x + X_Adjust, y + Y_Adjust + 4, icon, Rect.new(0, 0, Icon_X, Icon_Y), 255)
x += Icon_X + 2
end
end
#--------------------------------------------------------------------------
def draw_actor_parameter(actor, x, y, type)
case type
when 0
parameter_name = $data_system.words.atk
parameter_value = actor.atk
when 1
parameter_name = $data_system.words.pdef
parameter_value = actor.pdef
when 2
parameter_name = $data_system.words.mdef
parameter_value = actor.mdef
when 3
parameter_name = $data_system.words.str
parameter_value = actor.str
when 4
parameter_name = (DAMAGE_ALGORITHM_TYPE == 0 ? STAT_VIT : $data_system.words.dex)
parameter_value = actor.dex
when 5
parameter_name = $data_system.words.agi
parameter_value = actor.agi
when 6
parameter_name = $data_system.words.int
parameter_value = actor.int
when 7
parameter_name = STAT_EVA
parameter_value = actor.eva
end
self.contents.font.color = system_color
self.contents.draw_text(x, y, 120, 32, parameter_name)
self.contents.font.color = normal_color
self.contents.draw_text(x + 120, y, 36, 32, parameter_value.to_s, 2)
end
end
#==============================================================================
# ■ Window_Help
#==============================================================================
class Window_Help < Window_Base
#--------------------------------------------------------------------------
def initialize
super(0, 0, 640, 64)
self.contents = Bitmap.new(width - 32, height - 32)
self.z = 2000 if $game_temp.in_battle
self.back_opacity = HELP_OPACITY if $game_temp.in_battle
end
#--------------------------------------------------------------------------
def set_text_update(text, align = 0)
self.contents.clear
self.contents.font.color = normal_color
self.contents.draw_text(4, 0, self.width - 40, 32, text, align)
@text = text
@align = align
@actor = nil
self.visible = true
end
#--------------------------------------------------------------------------
def set_enemy(enemy)
text = enemy.name
set_text_update(text, 1)
text_width = self.contents.text_size(text).width
x = (text_width + self.width)/2
status_icon = []
for i in enemy.states
if $data_states[i].rating >= 1
begin
status_icon.push(RPG::Cache.icon($data_states[i].name + "_st"))
break if status_icon.size > (Icon_max - 1)
rescue
end
end
end
for icon in status_icon
self.contents.blt(x + X_Adjust, y + Y_Adjust + 4, icon, Rect.new(0, 0, Icon_X, Icon_Y), 255)
x += Icon_X + 2
end
end
end
#==============================================================================
# ■ Window_Skill
#==============================================================================
class Window_Skill < Window_Selectable
#--------------------------------------------------------------------------
def initialize(actor)
super(0, 128, 640, 352)
@actor = actor
@column_max = 2
refresh
self.index = 0
if $game_temp.in_battle
self.y = 320
self.height = 160
self.z = 2100
self.back_opacity = MENU_OPACITY
end
end
#--------------------------------------------------------------------------
def draw_item(index)
skill = @data[index]
if @actor.skill_can_use?(skill.id)
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
x = 4 + index % 2 * (288 + 32)
y = index / 2 * 32
rect = Rect.new(x, y, self.width / @column_max - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon(skill.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)
cost = @actor.calc_sp_cost(@actor, skill)
self.contents.draw_text(x + 232, y, 48, 32, cost.to_s, 2)
end
end
#==============================================================================
# ■ Window_Item
#==============================================================================
class Window_Item < Window_Selectable
#--------------------------------------------------------------------------
def initialize
super(0, 64, 640, 416)
@column_max = 2
refresh
self.index = 0
if $game_temp.in_battle
self.y = 320
self.height = 160
self.z = 2100
self.back_opacity = MENU_OPACITY
end
end
end
#==============================================================================
# ■ Window_PartyCommand
#==============================================================================
class Window_PartyCommand < Window_Selectable
#--------------------------------------------------------------------------
alias initialize_n01 initialize
#--------------------------------------------------------------------------
def initialize
initialize_n01
self.z = 2000
end
end
#==============================================================================
# ■ Window_BattleStatus
#==============================================================================
class Window_BattleStatus < Window_Base
#--------------------------------------------------------------------------
def initialize
super(0, 320, 640, 160)
self.contents = Bitmap.new(width - 32, height - 32)
@level_up_flags = []
for i in 0...$game_party.actors.size
@level_up_flags.push(false)
end
self.z = 2000
self.opacity = STATUS_OPACITY
refresh
end
#--------------------------------------------------------------------------
def update
super
end
end
#==============================================================================
# ■ Window_NameCommand
#==============================================================================
class Window_BattleResult < Window_Base
#--------------------------------------------------------------------------
def initialize(exp, gold, treasures)
@exp = exp
@gold = gold
@treasures = treasures
super(160, 0, 320, @treasures.size * 32 + 64)
self.contents = Bitmap.new(width - 32, height - 32)
self.y = 160 - height / 2
self.back_opacity = 160
self.z = 2000
self.visible = false
refresh
end
end
#==============================================================================
# ■ Window_NameCommand
#==============================================================================
class Window_NameCommand < Window_Base
#--------------------------------------------------------------------------
def initialize(actor, x, y)
super(x, y, 160, 64)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = Font.default_name
self.z = 2000
self.back_opacity = COMMAND_OPACITY
refresh(actor)
end
#--------------------------------------------------------------------------
def refresh(actor)
self.contents.clear
self.contents.font.color = normal_color
self.contents.draw_text(0, 0, 128, 32, actor.name, 1) if actor != nil
end
end
#==============================================================================
# ■ RPG::Sprite
#==============================================================================
class RPG::Sprite < ::Sprite
#--------------------------------------------------------------------------
include N01
#--------------------------------------------------------------------------
def initialize(viewport = nil)
super(viewport)
@_whiten_duration = 0
@_appear_duration = 0
@_escape_duration = 0
@_collapse_duration = 0
@_damage_duration = 0
@_animation_duration = 0
@_blink = false
@_damage_durations = []
@time = 0
end
#--------------------------------------------------------------------------
def appear
end
#--------------------------------------------------------------------------
def escape
end
#--------------------------------------------------------------------------
def collapse
end
#--------------------------------------------------------------------------
def damage(value, critical, sp_damage = nil)
dispose_damage(0...@_damage_durations.size)
@_damage_sprites = []
if value.is_a?(Numeric)
damage_string = value.abs.to_s
else
damage_string = value.to_s
end
@damage_size = 1 if !MULTI_POP
@damage_size = damage_string.size if MULTI_POP
for i in 0...@damage_size
letter = damage_string[i..i] if MULTI_POP
letter = damage_string if !MULTI_POP
bitmap = Bitmap.new(160, 48)
bitmap.font.name = DAMAGE_FONT
bitmap.font.size = DMG_F_SIZE
bitmap.font.color.set(0, 0, 0)
bitmap.draw_text(-1, 12-1,160, 36, letter, 1)
bitmap.draw_text(+1, 12-1,160, 36, letter, 1)
bitmap.draw_text(-1, 12+1,160, 36, letter, 1)
bitmap.draw_text(+1, 12+1,160, 36, letter, 1)
if value.is_a?(Numeric) and value < 0
bitmap.font.color.set(HP_REC_COLOR[0],HP_REC_COLOR[1],HP_REC_COLOR[2]) if !sp_damage
bitmap.font.color.set(SP_REC_COLOR[0],SP_REC_COLOR[1],SP_REC_COLOR[2]) if sp_damage
else
bitmap.font.color.set(HP_DMG_COLOR[0],HP_DMG_COLOR[1],HP_DMG_COLOR[2]) if !sp_damage
bitmap.font.color.set(SP_DMG_COLOR[0],SP_DMG_COLOR[1],SP_DMG_COLOR[2]) if sp_damage
bitmap.font.color.set(CRT_DMG_COLOR[0],CRT_DMG_COLOR[1],CRT_DMG_COLOR[2]) if critical
end
bitmap.draw_text(0, 12,160, 36, letter, 1)
if critical and CRITIC_TEXT and i == 0
x_pop = (MULTI_POP ? (damage_string.size - 1) * (DMG_SPACE / 2) : 0)
bitmap.font.size = ((DMG_F_SIZE * 2) / 3).to_i
bitmap.font.color.set(0, 0, 0)
bitmap.draw_text(-1 + x_pop, -1, 160, 20, POP_CRI, 1)
bitmap.draw_text(+1 + x_pop, -1, 160, 20, POP_CRI, 1)
bitmap.draw_text(-1 + x_pop, +1, 160, 20, POP_CRI, 1)
bitmap.draw_text(+1 + x_pop, +1, 160, 20, POP_CRI, 1)
bitmap.font.color.set(CRT_TXT_COLOR[0],CRT_TXT_COLOR[1],CRT_TXT_COLOR[2]) if critical
bitmap.draw_text(0 + x_pop, 0, 160, 20, POP_CRI, 1)
end
if critical and CRITIC_FLASH
$game_screen.start_flash(Color.new(255, 255, 255, 255),10)
end
@_damage_sprites[i] = ::Sprite.new(self.viewport)
@_damage_sprites[i].bitmap = bitmap
@_damage_sprites[i].ox = 80
@_damage_sprites[i].oy = 20
@_damage_sprites[i].x = self.x + i * DMG_SPACE
@_damage_sprites[i].y = self.y - self.oy / 2
@_damage_sprites[i].z = DMG_DURATION + 3000 + i * 2
end
end
#--------------------------------------------------------------------------
def dispose
dispose_damage(0...@_damage_durations.size)
dispose_animation
dispose_loop_animation
if @damage_sprites != nil
for damage_sprite in @damage_sprites
damage_sprite.dispose
end
end
super
end
#--------------------------------------------------------------------------
def update
super
@damage_sprites = [] if @damage_sprites.nil?
@damage_durations = [] if @damage_durations.nil?
if @_damage_sprites != nil
for sprite in @_damage_sprites
if sprite != nil and sprite.visible
x = DMG_X_MOVE
y = DMG_Y_MOVE
d = sprite.z - 3000
m = self.mirror
@damage_sprites.push(Sprite_Damage.new(sprite, x, y, d, m))
sprite.visible = false
end
end
end
for damage_sprite in @damage_sprites
damage_sprite.update
end
for i in 0...@damage_sprites.size
@damage_sprites[i] = nil if @damage_sprites[i].disposed?
end
@damage_sprites.compact!
if @_whiten_duration > 0
@_whiten_duration -= 1
self.color.alpha = 128 - (16 - @_whiten_duration) * 10
end
if @_animation != nil and (Graphics.frame_count % 2 == 0)
@_animation_duration -= 1
update_animation
end
if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
update_loop_animation
@_loop_animation_index += 1
@_loop_animation_index %= @_loop_animation.frame_max
end
if @_blink
@_blink_count = (@_blink_count + 1) % 32
if @_blink_count < 16
alpha = (16 - @_blink_count) * 6
else
alpha = (@_blink_count - 16) * 6
end
self.color.set(255, 255, 255, alpha)
end
@@_animations.clear
end
#--------------------------------------------------------------------------
def dispose_damage(index)
return if @_damage_sprites == nil
if @_damage_sprites[index].is_a?(::Sprite) and @_damage_sprites[index].bitmap != nil
@_damage_sprites[index].bitmap.dispose
@_damage_sprites[index].dispose
@_damage_durations[index] = 0
end
end
#--------------------------------------------------------------------------
def dispose_animation
if @_animation_sprites != nil
sprite = @_animation_sprites[0]
if sprite != nil
@@_reference_count[sprite.bitmap] -= 1
if @@_reference_count[sprite.bitmap] == 0
sprite.bitmap.dispose
end
end
for sprite in @_animation_sprites
sprite.dispose
end
@_animation_sprites = nil
@_animation = nil
end
@mirror = false
end
#--------------------------------------------------------------------------
def animation_mirror(mirror_effect)
@mirror = mirror_effect
end
#--------------------------------------------------------------------------
def animation_set_sprites(sprites, cell_data, position)
for i in 0..15
sprite = sprites[i]
pattern = cell_data[i, 0]
if sprite == nil or pattern == nil or pattern == -1
sprite.visible = false if sprite != nil
next
end
sprite.visible = true
sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
if position == 3
if self.viewport != nil
sprite.x = self.viewport.rect.width / 2
sprite.y = self.viewport.rect.height - 160
else
sprite.x = 320
sprite.y = 240
end
else
sprite.x = self.x - self.ox + self.src_rect.width / 2
sprite.y = self.y - self.oy + self.src_rect.height / 2
sprite.y -= self.src_rect.height / 4 if position == 0
sprite.y += self.src_rect.height / 4 if position == 2
end
sprite.x += cell_data[i, 1]
sprite.y += cell_data[i, 2]
sprite.z = 2000
if @mirror
sprite.ox = 88
else
sprite.ox = 104
end
sprite.oy = 96
sprite.zoom_x = cell_data[i, 3] / 100.0
sprite.zoom_y = cell_data[i, 3] / 100.0
sprite.angle = cell_data[i, 4]
sprite.mirror = (cell_data[i, 5] == 1)
if @mirror
if sprite.mirror
sprite.mirror = false
else
sprite.mirror = true
end
end
sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
sprite.blend_type = cell_data[i, 7]
end
end
end
#==============================================================================
# ■ Sprite_Damage
#==============================================================================
class Sprite_Damage < Sprite
#--------------------------------------------------------------------------
include N01
#--------------------------------------------------------------------------
def initialize(sprite, init_x_speed, init_y_speed, duration, mirror)
super(nil)
self.bitmap = sprite.bitmap.dup unless sprite.bitmap.nil?
self.opacity = 255
self.x = sprite.x
self.y = sprite.y
self.z = 3000
self.ox = sprite.ox
self.oy = sprite.oy
@damage_mirror = mirror
@now_x_speed = init_x_speed
@now_y_speed = init_y_speed
@potential_x_energy = 0.0
@potential_y_energy = 0.0
@duration = duration
end
#--------------------------------------------------------------------------
def update
@duration -= 1
return unless @duration <= DMG_DURATION
super
n = self.oy + @now_y_speed
if n <= 0
@now_y_speed *= -1
@now_y_speed /= 2
@now_x_speed /= 2
end
self.oy = [n, 0].max
@potential_y_energy += DMG_GRAVITY
speed = @potential_y_energy.floor
@now_y_speed -= speed
@potential_y_energy -= speed
@potential_x_energy += @now_x_speed if @damage_mirror if POP_MOVE
@potential_x_energy -= @now_x_speed if !@damage_mirror if POP_MOVE
speed = @potential_x_energy.floor
self.ox += speed
@potential_x_energy -= speed
case @duration
when 1..10
self.opacity -= 25
when 0
self.dispose
end
end
end
Additional Scripts :
classe script
Def initialize
#==============================================================================
# Add-On: Battle Window
# by Atoa
#==============================================================================
# This Add-On grants the user a high custmization level of the battle windows
# Allowing font change, size and position of the text on the window.
# And also allowing the change of the position, size and opacity of the window.
#==============================================================================
module Atoa
# Exhibition Type (take a look at the 'IMPORTANT WARNING' just bellow)
Display_Type = 0
# If Display_Type = 0 the character attributes will be shown
# on the traditional XPway , horizontaly.
# Ex.:
# Ash Trevor Monique
# HP 741 HP 695 HP 486
# SP 541 SP 591 SP 661
#
# If Display_Type = 1 the character attributes will be shwon
# verticaly.
# Ex.:
# Ash HP 741 SP 541
# Trevor HP 695 SP 591
# Monique HP 486 SP 661
#
# If 'Display_Type = 2', the position will be custom. Adjust the postions below
#
#¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
# ***IMPORTANT WARNING** #
#¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
#
# If you change the value of 'Display_Type', you must readjust *ALL*
# X/Y coordinates of the texts. The change isn't automatic.
# Stay alert about this.
#
#============================================================================
# Only valid if 'Display_Type = 0', allows the centralization of the status
# windows if the group has less then 4 members
Horizontal_Centralize = true
# Only valid if 'Display_Type = 2', adjust the base position of the attributes
# of each character
Custom_Stat_Position = [[0,0],[8,24],[16,48],[18,72]]
# Configuration of the Attributes Battle Window
# Battle_Window = [Position X, Position Y, Width, Height, Opacity, Trasparent Edge]
Battle_Window = [0 , 0, 650, 125, 100, false]
# Leave the last value true to add the opacity to the edge of the window
# Needed if you wish to make 100% transparent windows
# The text format will be applied to the values in the menu?
Text_Format_in_Menu = true
# true = all format config are applied to the values in the menu
# false = the format configs are valid only in battle
#¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
# CONFIGURATION OF THE WINDOW CONTENT #
#¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
# Configuration of the name exhibition
# Name_Config = [Position X, Position Y, Font Name, Font Size, Bold]
Name_Config = [0, -8, 'Arial', 22, false]
# Configuration of the HP text exhibition
# HP_Text = [Position X, Position Y, Font Name, Font Size, Bold]
HP_Text = [0, 40, 'Arial', 22, false]
# Configuration of the HP digits exhibition
# HP_Number = [Font Name, Font Size, Bold, Show Max HP]
HP_Number = ['Arial', 22, false, true]
# Configuration of the Max HP digits exhibition
# Max_HP_Number = [Font Name, Font Size, Bold]
Max_HP_Number = ['Arial', 22, false]
# Configuration of the SP text exhibition
# SP_Text = [Position X, Position Y, Font Name, Font Size, Bold]
SP_Text = [0, 64, 'Arial', 22, false]
# Configuration of the SP digits exhibition
# SP_Number = [Font Name, Font Size, Bold, Show Max HP]
SP_Number = ['Arial', 22, false, true]
# Configuration of the Max SP digits exhibition
# Max_SP_Number = [Font Name, Font Size, Bold]
Max_SP_Number = ['Arial', 22, false]
# Configuration of the States exhibition
# State_Config = [Position X, Position Y]
State_Config = [0, 88]
# Show Level Up Message in status window?
Lvl_UP_FLAG = true
# Level Up Message
Lvl_Up_Msg = 'LEVEL UP!'
# The level up message is shown in the same place as the states
# Configuration of the Level exhibition
Draw_Level = true # Show level in status window?
Level_Name = 'Lv' # Name of the 'Level' Status shown in the window
# Configuration of the Level text exhibition
# Level_Text = [Position X, Position Y, Font Name, Font Size, Bold]
Level_Text = [0, 16, 'Arial', 22, false]
# Configuration of the Level digits exhibition
# Level_Number = [Font Name, Font Size, Bold]
Level_Number = ['Arial', 22, false]
# Configuration of the Exp exhibition:(only in menu when Text_Format_in_Menu = true)
Exp_Name = 'Exp' # Name of the 'Exp' Status shown in the window
# Configuration of the Exp text exhibition
# Exp_Text = [Font Name, Font Size, Bold]
Exp_Text = ['Arial', 22, false]
# Configuration of the Exp digits exhibition
# Exp_Number = [Font Name, Font Size, Bold]
Exp_Number = ['Arial', 22, false]
# Configuration of the Next Exp digits exhibition
# Next_Exp_Number = [Font Name, Font Size, Bold]
Next_Exp_Number = ['Arial', 22, true]
# Configuration of the Face exhibition
# To use faces, you must create an folder named 'Faces' in the Graphics folder
# The face graphic must have the same as the actor character graphic
# Show Faces? true = show / false = don't show
Show_Faces = true
# Face_Config = [Position X, Position Y, Opacity]
Face_Config = [29, 100, 255]
# Extension for Face file name, use if you want the battle faces file names
# to be different from the normal faces
Face_Extension = ''
# The text extension must be add to all faces file names
# E.g.: Face_Extension = '_bt'
# 001-Fighter01_bt
# Use the character hue on the face?
Use_Character_Hue = true
# true = use the hue
# true = dont't use the hue
# Configuration of the Char Graphic exhibition
# Show Char Graphic? true = show / false = don't show
Show_Char = false
# Char_Config = [Posição X, Posição Y, Transparencia, Show only half]
Char_Config = [96, 60, 255, true]
end
#==============================================================================
# ■ Atoa Module
#==============================================================================
$atoa_script = {} if $atoa_script.nil?
$atoa_script['Battle Windows'] = true
#==============================================================================
# ■ Window_Base
#==============================================================================
class Window_Base
#--------------------------------------------------------------------------
include Atoa
#--------------------------------------------------------------------------
alias battler_window_draw_actor_name draw_actor_name
def draw_actor_name(actor, x, y)
if $game_temp.in_battle or Text_Format_in_Menu
self.contents.font.color = normal_color
self.contents.font.name = Name_Config[2]
self.contents.font.size = Name_Config[3]
self.contents.font.bold = Name_Config[4]
self.contents.draw_text(x, y, 120, 32, actor.name)
set_default_font
else
battler_window_draw_actor_name(actor, x, y)
end
end
#--------------------------------------------------------------------------
alias battler_window_draw_actor_level draw_actor_level
def draw_actor_level(actor, x, y)
if $game_temp.in_battle or Text_Format_in_Menu
self.contents.font.color = system_color
self.contents.font.name = Level_Text[2]
self.contents.font.size = Level_Text[3]
self.contents.font.bold = Level_Text[4]
size = contents.text_size(Level_Name).width
self.contents.draw_text(x, y, size + 4, 32, Level_Name)
self.contents.font.color = normal_color
self.contents.font.name = Level_Number[0]
self.contents.font.size = Level_Number[1]
self.contents.font.bold = Level_Number[2]
self.contents.draw_text(x + size, y, 24, 32, actor.level.to_s, 2)
set_default_font
else
battler_window_draw_actor_level(actor, x, y)
end
end
#--------------------------------------------------------------------------
alias battler_window_draw_actor_hp draw_actor_hp
def draw_actor_hp(actor, x, y, width = 144)
if $game_temp.in_battle or Text_Format_in_Menu
self.contents.font.color = system_color
self.contents.font.name = HP_Text[2]
self.contents.font.size = HP_Text[3]
self.contents.font.bold = HP_Text[4]
self.contents.draw_text(x, y, 32, 32, $data_system.words.hp)
if width - 32 >= 108
hp_x = x + width - 108
flag = true
elsif width - 32 >= 48
hp_x = x + width - 48
flag = false
end
self.contents.font.color = actor.hp == 0 ? knockout_color :
actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color
self.contents.font.name = HP_Number[0]
self.contents.font.size = HP_Number[1]
self.contents.font.bold = HP_Number[2]
self.contents.draw_text(hp_x, y, 48, 32, actor.hp.to_s, 2)
if flag
self.contents.font.color = normal_color
self.contents.font.name = HP_Text[2]
self.contents.font.size = HP_Text[3]
self.contents.font.bold = HP_Text[4]
self.contents.draw_text(hp_x + 48, y, 12, 32, '/', 1)
self.contents.font.name = Max_HP_Number[0]
self.contents.font.size = Max_HP_Number[1]
self.contents.font.bold = Max_HP_Number[2]
self.contents.draw_text(hp_x + 60, y, 48, 32, actor.maxhp.to_s)
end
set_default_font
else
battler_window_draw_actor_hp(actor, x, y, width)
end
end
#--------------------------------------------------------------------------
alias battler_window_draw_actor_sp draw_actor_sp
def draw_actor_sp(actor, x, y, width = 144)
if $game_temp.in_battle or Text_Format_in_Menu
self.contents.font.color = system_color
self.contents.font.name = SP_Text[2]
self.contents.font.size = SP_Text[3]
self.contents.font.bold = SP_Text[4]
self.contents.draw_text(x, y, 32, 32, $data_system.words.sp)
if width - 32 >= 108
sp_x = x + width - 108
flag = true
elsif width - 32 >= 48
sp_x = x + width - 48
flag = false
end
self.contents.font.color = actor.sp == 0 ? knockout_color :
actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color
self.contents.font.name = SP_Number[0]
self.contents.font.size = SP_Number[1]
self.contents.font.bold = SP_Number[2]
self.contents.draw_text(sp_x, y, 48, 32, actor.sp.to_s, 2)
if flag
self.contents.font.color = normal_color
self.contents.font.name = SP_Text[2]
self.contents.font.size = SP_Text[3]
self.contents.font.bold = SP_Text[4]
self.contents.draw_text(sp_x + 48, y, 12, 32, '/', 1)
self.contents.font.name = Max_SP_Number[0]
self.contents.font.size = Max_SP_Number[1]
self.contents.font.bold = Max_SP_Number[2]
self.contents.draw_text(sp_x + 60, y, 48, 32, actor.maxsp.to_s)
end
set_default_font
else
battler_window_draw_actor_sp(actor, x, y, width)
end
end
#--------------------------------------------------------------------------
alias battler_window_draw_actor_exp draw_actor_exp
def draw_actor_exp(actor, x, y)
if Text_Format_in_Menu
self.contents.font.color = system_color
self.contents.font.name = Exp_Text[0]
self.contents.font.size = Exp_Text[1]
self.contents.font.bold = Exp_Text[2]
self.contents.draw_text(x, y, 32, 32, Exp_Name)
self.contents.font.color = normal_color
self.contents.font.name = Exp_Number[0]
self.contents.font.size = Exp_Number[1]
self.contents.font.bold = Exp_Number[2]
self.contents.draw_text(x + 12, y, 96, 32, actor.exp_s, 2)
self.contents.font.color = normal_color
self.contents.font.name = Exp_Text[0]
self.contents.font.size = Exp_Text[1]
self.contents.font.bold = Exp_Text[2]
self.contents.draw_text(x + 108, y, 12, 32, '/', 1)
self.contents.font.name = Next_Exp_Number[0]
self.contents.font.size = Next_Exp_Number[1]
self.contents.font.bold = Next_Exp_Number[2]
self.contents.draw_text(x + 120, y, 96, 32, actor.next_exp_s)
set_default_font
else
battler_window_draw_actor_exp(actor, x, y, width)
end
end
#--------------------------------------------------------------------------
def draw_actor_battle_face(actor, x, y, opacity = 255)
begin
face_hue = Use_Character_Hue ? actor.character_hue : 0
face = RPG::Cache.faces(actor.character_name + Face_Extension, face_hue)
fw = face.width
fh = face.height
src_rect = Rect.new(0, 0, fw, fh)
self.contents.blt(x - fw / 23, y - fh, face, src_rect, opacity)
rescue
end
end
#--------------------------------------------------------------------------
def draw_actor_battle_graphic(actor, x, y, opacity = 255)
begin
bitmap = RPG::Cache.character(actor.character_name, actor.character_hue)
cw = bitmap.width / 4
ch = bitmap.height / (Char_Config[3] ? 6 : 4)
src_rect = Rect.new(0, 0, cw, ch)
self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect, opacity)
rescue
end
end
#--------------------------------------------------------------------------
def set_default_font
self.contents.font.name = Font.default_name
self.contents.font.size = Font.default_size
self.contents.font.bold = false
end
end
#==============================================================================
# ■ Window_BattleStatus
#==============================================================================
class Window_BattleStatus < Window_Base
#--------------------------------------------------------------------------
def initialize
super(Battle_Window[0], Battle_Window[1], Battle_Window[2], Battle_Window[3])
self.contents = Bitmap.new(width - 32, height - 32)
@level_up_flags = []
for i in 0...$game_party.actors.size
@level_up_flags << false
end
self.z = 900
self.back_opacity = Battle_Window[4]
self.opacity = Battle_Window[4] if Battle_Window[5]
refresh
end
#--------------------------------------------------------------------------
def refresh
self.contents.clear
@item_max = $game_party.actors.size
for i in 0...$game_party.actors.size
self.contents.font.size = 22
hp_w = HP_Number[3] ? 140 : 80
sp_w = SP_Number[3] ? 140 : 80
actor = $game_party.actors[i]
case Display_Type
when 0
actor_x = Horizontal_Centralize ? ((624 / MAX_MEMBER) * ((4 - $game_party.actors.size)/2.0 + i)).floor : i * (624 / MAX_MEMBER)
actor_y = 0
when 1
actor_x = 0
actor_y = i * 32
when 2
actor_x = Custom_Stat_Position[i][0]
actor_y = Custom_Stat_Position[i][1]
end
draw_actor_battle_face(actor, actor_x + Face_Config[0], actor_y + Face_Config[1], Face_Config[2]) if Show_Faces
draw_actor_battle_graphic(actor, actor_x + Char_Config[0], actor_y + Char_Config[1], Char_Config[2]) if Show_Char
draw_actor_name(actor, actor_x + Name_Config[0], actor_y + Name_Config[1])
draw_actor_hp(actor, actor_x + HP_Text[0], actor_y + HP_Text[1], hp_w)
draw_actor_sp(actor, actor_x + SP_Text[0], actor_y + SP_Text[1], sp_w)
draw_actor_level(actor, actor_x + Level_Text[0], actor_y + Level_Text[1]) if Draw_Level
if @level_up_flags[i] and Lvl_UP_FLAG
self.contents.font.color = normal_color
self.contents.draw_text(actor_x + State_Config[0], actor_y + State_Config[1], 132, 32, Lvl_Up_Msg )
else
draw_actor_state(actor, actor_x + State_Config[0], actor_y + State_Config[1])
end
end
end
#--------------------------------------------------------------------------
def update
super
end
end
class script
def initialize
#==============================================================================
# Advanced Status
# by Atoa
#==============================================================================
# This script add a lot of new stats and features for actors
#
# He adds the following features:
# - Multi Slot for equips
# - 2 Weapons System
# - 2 Handed Weapons
# - Multiple Auto Status for Weapons and Armors
# - SP cost changing equips
# - Status Limit Settings
# - New Status for Equips
# - New status and elemental resist system
#
# IMPORTANT:
# - If you using the multi slot equip system, the event command for changing
# equips will be screwed.
# So if you need to force any equip change with events, make an Script Call
# and add this command:
# $game_actors[Actor ID].equip(Slot Index, Equip ID)
# Slot Index = remember that indexes starts from 0, so the 1st slot will
# be index 0, the 2nd will be index 1...
#
# - Some functions are really complex, if you're a noob, don't mess with them.
# Learn the basic of RGSS before trying the advanced features
#==============================================================================
module N01
# Do not remove or change these lines
constants = ['Equip_Lock','Auto_Status','Armor_Lock','Sp_Cost_Change_Equip',
'Weapon_Lock','Max_Level','Speacial_Status','Element_Resist','State_Resist',
'Equip_Set','Set_Effect','Equip_Skills','Weapon_Damage_Type']
for i in 0...constants.size
eval(constants[i] + " = {}")
end
# Do not remove or change these lines
#¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
# VISUALIZATION SETTINGS
#¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
# Here yo can set some values to change the equip and status menu
# This script isn't comatible with complex equip and status menu systems,
# so use this area to customize your menus
# Exhibition style of the equip menu
Equip_Menu_Syle = 0
# 0 = Default, shows atk, pdef, mdef
# 1 = Default, shows atk, pdef, mdef, str, dex, int, agi
# 2 = Default, shows str, dex, int, agi
# 3 and 4 = custom, shows all status (including the news)
# Window Opacity
Equip_Window_Opacity = 255
# Show map on background
Show_Map_Equip_Menu = false
# Background image
Equip_Menu_Back = nil
# If you want to use your own backgruon image, add the filename here.
# the graphic must be on the Windowskin folder.
# if the value = nil, no image will be used.
# Remember to reduce the window transparency.
# Define here which symbols/letters will be used to show status alteration
# On the side there are a few exemples on symbols you can also use
Stat_Nil = '>' # '■' '↔' '±' '=' '>'
Stat_Up = '>' # '▲' '↑' '»' '+' '>'
Stat_Down = '>' # '▼' '↓' '«' '-' '>'
# New Status Exhibition
Extra_Status = [7,8,9]
# 7 = Evasion
# 8 = Hit Rate
# 9 = Critical Rate
# 10 = Critical Damage
# 11 = Critical Rate Resist
# 12 = Critical Damage Resist
# Name of the new status
Stat_Eva = 'Evasion'
Stat_Hit = 'Hit'
Stat_Crt = 'Critical'
Stat_Dmg = 'Critical Damage'
Stat_Res_Crt = 'Critical Resist'
Stat_Res_Dmg = 'Critical Damage Resist'
#=============================================================================
#¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
# DUAL WIELDING SETTINGS
#¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
# Here you can set wich actors or classes can use two weapons
# Second Attack Pose ID
Second_Attack_Pose = 12
# This set if the tow_swords style will use the total actors attack in both
# attacks or calculate each attack separately
Use_Old_Two_Sword_Beahave = false
# true = use old behave, the total attack is used and multiplied by the values
# in "TWO_SWORDS_STYLE" on the Basic config
# false = use the new behave, where each damage is calculed separately, depending
# on the weapon in each hand
# Attack power rate for normal attacks when using more than one weapon
Dual_Attack_Power = 75
# Attack power rate for skills when using more than one weapon
Dual_Skill_Power = 75
# Actors that uses two weapons, add here their ids
Two_Swords_Actors = []
# Classes that uses two weapons, add here their ids
Two_Swords_Classes = []
# You can add or remove the dual wielding feature with script calls.
#
# $game_party.two_swords_actors_add(Actor ID)
# to add the dual wielding to an actor.
#
# $game_party.two_swords_actors_remove(Actor ID)
# to remove the dual wielding from an actor.
#
# $game_party.two_swords_classes_add(Class ID)
# to add the dual wielding to an class.
#
# $game_party.two_swords_classes_remove(Class ID)
# to remove the dual wielding from an class.
#
#=============================================================================
#¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
# RIGHT HAND AND LEFT HAND EQUIP SETTINGS
#¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
# Here you can set wich hand the equip can be used
# Just add their ids bellow
# Two Handed weapons
Two_Hands_Weapons = []
# Right Hand only Weapons
Right_Hand_Weapons = []
# Left Hand only Weapons
Left_Hand_Weapons = []
#=============================================================================
#¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
# SKILL COST CHANGE EQIPMENTS
#¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
# Here you can set equipments that changes the SP cost for skill
# ou diminuem o custo de SP das habilidades
# Sp_Cost_Change_Equip[equip_kind]= {id => change}
# equip_kind = kind of the equipment
# 'Weapon' for weapons, 'Armor' for armors
# id = equip ID
# change = rate of change in the SP cost, postive values are reductions,
# negative values are increases
Sp_Cost_Change_Equip['Weapon'] = {38 => 25}
Sp_Cost_Change_Equip['Armor'] = {37 => -50}
#=============================================================================
#¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
# CONFIGURAÇÕES DOS SLOTS DE EQUIPAMENTOS
#¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
# Here you can set the equipment multi slot configurations
# Equipment Kinds
# The order of the values here define the order that the equipment will be
# shown in the menu
# If you repeat an value, means that the actor can equip more than one
# equip of that type,
Equip_Kinds = [0,1,2,3,5,4,4]
# 0 = Weapons (if you add more than one value equal zero, all these equips
# will be considered 'right hand', so they won't remove the shield)
# 1 = Shields (any equip set as 'Shield' will be exchanged by an weapon if
# the actor have the dual wielding)
# 2 = Helmets
# 3 = Armors
# 4 = Accessories
# Values above 5 are the extra slots, use to creat equipments like Boots, Capes...
# You must set the IDs of the extra slots equips in 'Extra_Equips_ID'
#
# It's recomended that you leave only one 'Weapon' and one 'Shield', once
# it interfere in the Dual Wielding and 2 Haded Weapons
# You can change this value individually for each actor making an script call
# and adding this command:
# $game_actors[actor_id].equip_kind = [x,y,z]
# actor_id = actor ID
# [x,y,z] = new equip kind configuration
# IDs of the equipments
# Extra_Equips_ID = {kind => [equips_ids]}
# kind = equipment type, set on Equip_Kinds
# equips_ids = id of the armors of this equip type
Extra_Equips_ID = {5 => [38,39]}
# Name of the equips shown in the equip and status window
Equip_Names = ['Right Hand', 'Left Hand', 'Helmet', 'Armor', 'Boots',
'Accessory', 'Accessory']
# The order here is the order that the names are shown in the menu, set
# them according to the values set in 'Equip_Kinds'.
# if you change the value of the kinds with script calls, remember to change
# the names.
# You can change this value individually for each actor making an script call
# and adding this command:
# $game_actors[actor_id].equip_names = [x,y,z]
# actor_id = actor ID
# [x,y,z] = new equip names configuration
# Equipment Lock, these lines allows you to 'lock' an determined type of
# equipment, don't allow the actor to stay without equipment of this type
# You can change equips freely, but can't remove.
# E.g.: You have an Bow user character, and don't want him to stay without bows.
# Equip_Lock[equip_kind] = {actor_id =>[equip_type_id]}
# equip_kind = kind of the equipment
# 'Weapon' for weapons, 'Armor' for armors
# actor_id = actor id
# equip_type_id = id of the equipment
# 0 = right hand weapon
# 1 = left hand weapon or shield
# 2,3,4... = armors
Equip_Lock['Weapon']= {1 => [0], 2 => [0], 3 => [0], 4 => [0],
5 => [0], 6 => [0], 7 => [0], 8 => [0]}
Equip_Lock['Armor']= {1 => [1], 2 => [1]}
#=============================================================================
#¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
# WEAPON ATTACK STATUS CONFIGURATION
#¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
# here you can change the base status for damage of weapons
# You cam make weapons that causes damage based on dex, int or other status
#
# Weapon_Damage_Type = {Weapon_ID => {Status => Mult}}
# Weapon_ID = Weapon ID
# Status = Status that define the base damage of weapon. Can be:
# 'maxhp',maxsp','hp','sp','level','str','dex','int','agi','atk',
# 'def','mdef','eva','hit'
# If you create an new status on game actor, you can add it too
# Mult = Multiplier of the status, can be decimals.
Weapon_Damage_Type = {39 => {'str'=> 0.5, 'agi' => 0.5}, 40 => {'int'=> 1},
41 => {'hp'=> 0.1}, 42 => {'level'=> 10},}
#=============================================================================
#¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
# STATUS LIMIT SETTINGS
#¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
# Here you can set new limits for status and level
# Default level limit
Max_Level_Default = 99
# Individual level limit
# Max_Level[ID] = X
# ID = Actor ID
# X = Max level
Max_Level[1] = 99
Max_Level[2] = 99
Max_Level[3] = 99
Max_Level[4] = 99
# Actor status limit
Actor_Max_Hp = 9999
Actor_Max_Sp = 9999
Actor_Max_Str = 999
Actor_Max_Dex = 999
Actor_Max_Agi = 999
Actor_Max_Int = 999
Actor_Max_Atk = 999
Actor_Max_PDef = 999
Actor_Max_MDef = 999
# Base status Multiplier
# These values change the base status of the character
# Can be decimals(E.g.: 2.7)
Actor_Mult_Hp = 1
Actor_Mult_Sp = 1
Actor_Mult_Str = 1
Actor_Mult_Dex = 1
Actor_Mult_Agi = 1
Actor_Mult_Int = 1
#=============================================================================
#¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
# NEW STATUS SETTINGS
#¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
# Settings for the new status, here you can add new status for weapons and armors
# Auto_Status = You can set one or more auto status to an Weapon or Armor
# Auto_Status[equip_kind] = { A => [ B, C, D...]}
# equip_kind = kind of the equipment
# 'Weapon' for weapons, 'Armor' for armors
# A = Weapon ID or Armor ID
# B,C,D = ID dos status permanentes.
#
Auto_Status['Weapon'] = {}
Auto_Status['Armor'] = {}
# Speacial_Status = New Status for Weapons or Armors and
# Speacial_Status[Action_Type] = { Action_ID => {Status => Value}}
# equip_kind = kind of the equipment
# 'Weapon' for weapons, 'Armor' for armors
# Action_ID = Weapon ID or Armor ID
# Status = Status Changed, can be equal:
# 'hit' = Hit Rate: Hit Rate Modifier
# 'crt' = Critical Rate: Changes the chance of causing critical hits.
# 'dmg' = Critical Damage: Changes the damage dealt by critical hits.
# 'rcrt' = Critical Rate Resist: Changes the chance of reciving citical hits
# 'rdmg' = Critical Damage Resist: Changes the damage recived by critical hits.
Speacial_Status['Weapon'] = {}
Speacial_Status['Armor'] = {}
#=============================================================================
#¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
# ELEMENTAL AND STATUS RESISTANCE SETTINGS
#¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
# Here you can set an new style for the elemental and status resistance, allowing
# you to set elemental resistance based on actors IDs and set increases and/or
# decreases in resistance for equipments and status
# Use the new status resist style?
Use_New_Resist = true
# Style of the resistance acumulation
Addition_Type = 0
# 0 = The values are added, considering all values
# 1 = The values are added, considering only the higher and the lower values
# 2 = The value used are the average, considering all values
# 3 = The value used are the average, considering only the higher and the lower values
# Element_Resist[Type] = {Type_ID => {Element_ID => Resist_Value}
# Type = type of the object that gives the resistance
# 'Actor' = actor's natural resistance
# 'State' = resistance given by states
# 'Armor' = resistance given by armors
# 'Weapon' = resistance given by weapons
# Type_ID = id of the actor, state, armor or weapon
# Element_ID = ID of the element that will have the value change
# Resist_Value = Resistance change value, must be an Integer.
# positive values are increases in resistance, negative are reductions.
# E.g.: an actor imune to fire equips an armor that gives -1 fire resistance
# will have the fire resistance changed from imune to resistant.
Element_Resist['Actor'] = {1 => {4 => -1, 2 => -1}, 2 => {4 => 2, 2 => -1},
3 => {4 => 2, 2 => -1}, 4 => {4 => 2, 2 => -1}}
Element_Resist['State'] = {}
Element_Resist['Armor'] = {}
Element_Resist['Weapon'] = {}
# State_Resist[Type] = {Type_ID => {State_ID => Resist_Value}
# Type = type of the object that gives the resistance
# 'Actor' = actor's natural resistance
# 'State' = resistance given by states
# 'Armor' = resistance given by armors
# 'Weapon' = resistance given by weapons
# Type_ID = id of the actor, state, armor or weapon
# State_ID = ID of the state that will have the value change
# Resist_Value = Resistance change value, must be an Integer.
# positive values are increases in resistance, negative are reductions.
State_Resist['Actor'] = {}
State_Resist['State'] = {}
State_Resist['Armor'] = {}
State_Resist['Weapon'] = {}
#=============================================================================
#¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
# EQUIPMENT SKILLS SETTINGS
#¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
# Here you can set equipments that adds skills for the actors when equiped,
# you can also set an minimum level for the skills to be learned
#
# Equip_Skills[Equip_Type] = {Equip_ID => {Min_Level => Skill_ID}}
# Equip_Type = 'Weapon' for weapons, 'Armor' for armor
# Equips_ID = ID do equipamento
# Min_Level = minimum level required for learning the skill
# Skill_ID = id of the skill learned
Equip_Skills['Weapon'] = {}
Equip_Skills['Armor'] = {}
#=============================================================================
#¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
# EQUIPMENT SET SETTINGS
#¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
# These configurations allows you to creat "equip sets"
# Sets are equipments that offer extra effects when used togther
#
# The configuration are divided in two parts:
# - Equip_Set: where you configure wich equip is part of a set
# - Set_Effect: where you configure the effects of the set
#
# Equip_Set[Set_ID] = {Equip_Type => [Equips_IDs]}
# Set_ID = Set ID, this value must be the same as the one in 'Set_Effect'
# Equip_Type = 'Weapon' for weapons, 'Armor' for armor
# Equips_IDs = Equiment IDs
Equip_Set[1] = {'Armor' => [12,24,28]}
Equip_Set[2] = {'Weapon' => [4], 'Armor' => [4,8,16]}
# Set_Effect[Set_ID] = {Effect_Type => Effects}
# Set_ID = Set ID, this value must be the same as the one in 'Equip_Set'
# Effect_Type = type of the effect
# 'status' = change on the actor status
# 'auto states' = auto states
# 'skills' = skills learned
# 'states' = elemental resistance change (only if 'Use_New_Resist = true')
# 'elements' = states resistance change (only if 'Use_New_Resist = true')
# Effects = the chages caused, varies according to 'Effect_Type'
# - if 'Effect_Type' = 'status'
# 'status' => {stat => value}
# value = value of change in the status
# stat = the status changed, must be one of the values bellow
# 'maxhp' = Max Hp
# 'maxsp' = Max Sp
# 'level' = Level
# 'atk' = Attack
# 'pdef' = Physical Defense
# 'mdef' = Magic Defense
# 'str' = Strength
# 'dex' = Dexterity
# 'int' = Intelligence
# 'agi' = Agility
# 'eva' = Evasion
# 'hit' = Hit Rate
# 'crt' = Critical Rate
# 'dmg' = Critical Damage
# 'rcrt' = Critical Rate Resist.
# 'rdmg' = Critical Damage Resist.
# - if 'Effect_Type' = 'auto states'
# 'auto states' => [states_ids]
# states_ids = ids of the auto states
# - if 'Effect_Type' = 'skills'
# 'skills' => {min_level => skill_id}
# min_level = minimum level required for learning the skill
# skill_id = id of the skill learned
# - if 'Effect_Type' = 'states'
# 'states' => {state_id => resist_value}
# state_id = id of the state
# resist_value = value of resitance change
# - se 'Effect_Type' = 'elements'
# 'elements' => {element_id => resist_value}
# element_id = id of the element
# resist_value = value of resitance change
Set_Effect[1] = {'status' => {'maxsp' => 500, 'int' => 100}}
Set_Effect[2] = {'status' => {'maxhp' => 200, 'maxsp' => 200}, 'auto states' => [22],
'skills' => {1 => 31, 20 => 32}, 'states' => {1 => 1, 4 => 3},
'elements' => {1 => 1, 3 => 1, 5 => 1}}
#=============================================================================
end
#==============================================================================
# ■ Atoa Module
#==============================================================================
$atoa_script['SBS Actor Status'] = true
#==============================================================================
# ■ RPG::Weapon
#==============================================================================
class RPG::Weapon
#--------------------------------------------------------------------------
include N01
#--------------------------------------------------------------------------
attr_accessor :multi_auto_state_id
attr_accessor :crt
attr_accessor :dmg
attr_accessor :hit
attr_accessor :rcrt
attr_accessor :rdmg
attr_accessor :scope
attr_accessor :element_resist
#--------------------------------------------------------------------------
alias acbs_initialize_actorstatus_rpgweapon initialize
def initialize
acbs_initialize_actorstatus_rpgweapon
@multi_auto_state_id, @element_resist, @state_resist = [], [], []
end
#--------------------------------------------------------------------------
def element_resist
return @element_resist unless @element_resist.nil?
resist = Element_Resist.dup
@element_resist = []
for i in 1...$data_system.elements.size
if resist['Weapon'] != nil && resist['Weapon'][@id] != nil &&
resist['Weapon'][@id][i] != nil
@element_resist[i] = resist['Weapon'][@id][i]
else
@element_resist[i] = 0
end
end
return @element_resist
end
#--------------------------------------------------------------------------
def state_resist
return @state_resist unless @state_resist.nil?
resist = State_Resist.dup
@state_resist = []
for i in 1...$data_states.size
if resist['Weapon'] != nil && resist['Weapon'][@id] != nil &&
resist['Weapon'][@id][i] != nil
@state_resist[i] = resist['Weapon'][@id][i]
else
@state_resist[i] = 0
end
end
return @state_resist
end
#--------------------------------------------------------------------------
def multi_auto_state_id
st = Auto_Status['Weapon']
return @multi_auto_state_id = st != nil && st[@id] != nil ? st[@id] : []
end
#--------------------------------------------------------------------------
def hit
wpn = Speacial_Status['Weapon']
return wpn[@id] != nil && wpn[@id]['hit'] != nil ? wpn[@id]['hit'] : 0
end
#--------------------------------------------------------------------------
def crt
wpn = Speacial_Status['Weapon']
return wpn[@id] != nil && wpn[@id]['crt'] != nil ? wpn[@id]['crt'] : 0
end
#--------------------------------------------------------------------------
def dmg
wpn = Speacial_Status['Weapon']
return wpn[@id] != nil && wpn[@id]['dmg'] != nil ? wpn[@id]['dmg'] : 0
end
#--------------------------------------------------------------------------
def rcrt
wpn = Speacial_Status['Weapon']
return wpn[@id] != nil && wpn[@id]['rcrt'] != nil ? wpn[@id]['rcrt'] : 0
end
#--------------------------------------------------------------------------
def rdmg
wpn = Speacial_Status['Weapon']
return wpn[@id] != nil && wpn[@id]['rdmg'] != nil ? wpn[@id]['rdmg'] : 0
end
#--------------------------------------------------------------------------
def type_id
return 0
end
end
#==============================================================================
# ■ RPG::Armor
#==============================================================================
class RPG::Armor
#--------------------------------------------------------------------------
include N01
#--------------------------------------------------------------------------
attr_accessor :multi_auto_state_id
attr_accessor :crt
attr_accessor :dmg
attr_accessor :hit
attr_accessor :rcrt
attr_accessor :rdmg
attr_accessor :element_resist
#--------------------------------------------------------------------------
alias acbs_initialize_actorstatus_rpgarmor initialize
def initialize
acbs_initialize_actorstatus_rpgarmor
@multi_auto_state_id, @element_resist, @state_resist = [], [], []
end
#--------------------------------------------------------------------------
def element_resist
return @element_resist unless @element_resist.nil?
resist = Element_Resist.dup
@element_resist = []
for i in 1...$data_system.elements.size
if resist['Armor'] != nil && resist['Armor'][@id] != nil &&
resist['Armor'][@id][i] != nil
@element_resist[i] = resist['Armor'][@id][i]
else
@element_resist[i] = 0
end
end
return @element_resist
end
#--------------------------------------------------------------------------
def state_resist
return @state_resist unless @state_resist.nil?
resist = State_Resist.dup
@state_resist = []
for i in 1...$data_states.size
if resist['Armor'] != nil && resist['Armor'][@id] != nil &&
resist['Armor'][@id][i] != nil
@state_resist[i] = resist['Armor'][@id][i]
else
@state_resist[i] = 0
end
end
return @state_resist
end
#--------------------------------------------------------------------------
def multi_auto_state_id
st = Auto_Status['Armor']
return @multi_auto_state_id = st != nil && st[@id] != nil ? st[@id] : []
end
#--------------------------------------------------------------------------
def hit
arm = Speacial_Status['Armor']
return arm[@id] != nil && arm[@id]['hit'] != nil ? arm[@id]['hit'] : 0
end
#--------------------------------------------------------------------------
def crt
arm = Speacial_Status['Armor']
return arm[@id] != nil && arm[@id]['crt'] != nil ? arm[@id]['crt'] : 0
end
#--------------------------------------------------------------------------
def dmg
arm = Speacial_Status['Armor']
return arm[@id] != nil && arm[@id]['dmg'] != nil ? arm[@id]['dmg'] : 0
end
#--------------------------------------------------------------------------
def rcrt
arm = Speacial_Status['Armor']
return arm[@id] != nil && arm[@id]['rcrt'] != nil ? arm[@id]['rcrt'] : 0
end
#--------------------------------------------------------------------------
def rdmg
arm = Speacial_Status['Armor']
return arm[@id] != nil && arm[@id]['rdmg'] != nil ? arm[@id]['rdmg'] : 0
end
#--------------------------------------------------------------------------
def type_id
if Extra_Equips_ID != nil
for kind in Extra_Equips_ID.dup
return kind[0] if kind[1].include?(@id)
end
end
return @kind + 1
end
end
#==============================================================================
# ■ RPG::State
#==============================================================================
class RPG::State
#--------------------------------------------------------------------------
attr_accessor :element_resist
#--------------------------------------------------------------------------
include N01
#--------------------------------------------------------------------------
alias acbs_initialize_actorstatus_rpgstate initialize
def initialize
acbs_initialize_actorstatus_rpgstate
@element_resist, @state_resist = [], []
end
#--------------------------------------------------------------------------
def element_resist
return @element_resist unless @element_resist.nil?
resist = Element_Resist.dup
@element_resist = []
for i in 1...$data_system.elements.size
if resist['State'] != nil && resist['State'][@id] != nil &&
resist['State'][@id][i] != nil
@element_resist[i] = resist['State'][@id][i]
else
@element_resist[i] = 0
end
end
return @element_resist
end
#--------------------------------------------------------------------------
def state_resist
return @state_resist unless @state_resist.nil?
resist = State_Resist.dup
@state_resist = []
for i in 1...$data_states.size
if resist['State'] != nil && resist['State'][@id] != nil &&
resist['State'][@id][i] != nil
@state_resist[i] = resist['State'][@id][i]
else
@state_resist[i] = 0
end
end
return @state_resist
end
end
#==============================================================================
# ■ Game_Party
#==============================================================================
class Game_Party
#--------------------------------------------------------------------------
include N01
#--------------------------------------------------------------------------
attr_accessor :two_swords_actors
attr_accessor :two_swords_classes
#--------------------------------------------------------------------------
alias acbs_initialize_actorstatus_gameparty initialize
def initialize
acbs_initialize_actorstatus_gameparty
@two_swords_actors = two_swords_actors
@two_swords_classes = two_swords_classes
end
#--------------------------------------------------------------------------
def two_swords_actors
return @two_swords_actors.nil? ? Two_Swords_Actors.dup : @two_swords_actors
end
#--------------------------------------------------------------------------
def two_swords_actors_add(id)
actor = $game_actors[id]
actor.remove_left_equip_actor
@two_swords_actors << id
@two_swords_actors.compact!
end
#--------------------------------------------------------------------------
def two_swords_actors_remove(id)
actor = $game_actors[id]
actor.remove_left_equip_actor
@two_swords_actors.delete(id)
@two_swords_actors.compact!
end
#--------------------------------------------------------------------------
def two_swords_classes
return @two_swords_classes.nil? ? Two_Swords_Classes.dup : @two_swords_classes
end
#--------------------------------------------------------------------------
def two_swords_classes_add(id)
for actor in @actors
actor.remove_left_equip_class(id)
end
@two_swords_classes << id
@two_swords_classes.compact!
end
#--------------------------------------------------------------------------
def two_swords_classes_remove(id)
for actor in @actors
actor.remove_left_equip_class(id)
end
@two_swords_classes.delete(id)
@two_swords_classes.compact!
end
end
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
include N01
#--------------------------------------------------------------------------
attr_accessor :crt
attr_accessor :dmg
attr_accessor :rcrt
attr_accessor :rdmg
attr_accessor :multi_attack
attr_accessor :current_weapon
attr_accessor :second_attack
#--------------------------------------------------------------------------
alias acbs_initialize_actorstatus_gamebattler initialize
def initialize
acbs_initialize_actorstatus_gamebattler
@multi_attack = @second_attack = false
end
#--------------------------------------------------------------------------
def crt
return 5
end
#--------------------------------------------------------------------------
def dmg
return 100
end
#--------------------------------------------------------------------------
def rcrt
return 0
end
#--------------------------------------------------------------------------
def rdmg
return 0
end
#--------------------------------------------------------------------------
def set_attack_critical(attacker)
atk_crt = DAMAGE_ALGORITHM_TYPE > 1 ? attacker.agi : attacker.dex
res_crt = attacker.crt - self.rcrt
self.critical = rand(100) < [res_crt, 1].max * atk_crt / self.agi
end
#--------------------------------------------------------------------------
def set_critical_damage(attacker)
dmg_crt = attacker.dmg - self.rdmg
self.damage += (self.damage * [dmg_crt, 1].max) / 100
end
#--------------------------------------------------------------------------
def state_rate(state_id)
table = [0,100,80,60,40,20,0]
if Use_New_Resist
result = state_rate_ranks(state_id)
else
result = table[self.state_ranks[state_id]]
end
return result
end
#--------------------------------------------------------------------------
def states_plus(plus_state_set)
effective = false
for i in plus_state_set
unless self.state_guard?(i)
effective |= self.state_full?(i) == false
if $data_states[i].nonresistance
@state_changed = true
add_state(i)
elsif self.state_full?(i) == false
state = state_rate(i)
if rand(100) < state
@state_changed = true
add_state(i)
end
end
end
end
return effective
end
#--------------------------------------------------------------------------
alias acbs_elements_correct_actorstatus elements_correct
def elements_correct(element_set)
if Use_New_Resist
value = 100
absorb = false
for i in element_set
element = element_rate_rank(i)
element *= -1 if element < 0 and absorb == true
value *= element / 100
absorb = true if element < 0 and absorb == false
end
return value.to_i
else
acbs_elements_correct_actorstatus(element_set)
end
end
#--------------------------------------------------------------------------
alias set_attack_damage_value_actorstatus set_attack_damage_value
def set_attack_damage_value(attacker)
if attacker.actor? and attacker.weapons.size > 0
if attacker.actor? and attacker.weapons[0] != nil and attacker.weapons[1] != nil
if Use_Old_Two_Sword_Beahave
mulitiplier = attacker.second_attack ? TWO_SWORDS_STYLE[0] : TWO_SWORDS_STYLE[1]
else
mulitiplier = Dual_Attack_Power
end
wpn = (attacker.weapons[0].atk * mulitiplier) / 100
wpn = (attacker.weapons[1].atk * mulitiplier) / 100 if attacker.second_attack
weapon = attacker.second_attack ? attacker.weapons[1] : attacker.weapons[0]
else
weapon = attacker.weapons[0]
wpn = attacker.atk
end
if Weapon_Damage_Type.include?(weapon.id)
pwr = 0
for stat in Weapon_Damage_Type[weapon.id]
pwr += eval("(attacker.#{stat[0]} * #{stat[1]}).to_i")
end
else
pwr = attacker.str
end
case DAMAGE_ALGORITHM_TYPE
when 0
atk = [wpn - (self.pdef / 2), 0].max
str = [20 + pwr, 0].max
when 1
atk = [wpn - ((wpn * self.pdef) / 1000), 0].max
str = [20 + pwr, 0].max
when 2
atk = 20
str = [(pwr * 3) - (self.dex * 2) , 0].max
when 3
atk = [(10 + wpn) - (self.pdef / 2), 0].max
str = [(20 + pwr) - (self.dex / 2), 0].max
end
self.damage = atk * str / 20
self.damage = 1 if self.damage == 0 and (rand(100) > 40)
self.damage *= elements_correct(weapon.element_set)
self.damage /= 100
attacker.second_attack = true if attacker.actor? and attacker.weapons[0] != nil and attacker.weapons[1] != nil
else
set_attack_damage_value_actorstatus(attacker)
end
end
#--------------------------------------------------------------------------
alias acbs_set_skill_power_actor_status_n01 set_skill_power
def set_skill_power(user, skill)
if user.actor?
if user.actor? and user.weapons[0] != nil and user.weapons[1] != nil
if Use_Old_Two_Sword_Beahave
mulitiplier = ((TWO_SWORDS_STYLE[0] + TWO_SWORDS_STYLE[1]) / 2)
else
mulitiplier = Dual_Attack_Power
end
wpn = (user.atk * mulitiplier) / 100
else
wpn = user.atk
end
if Weapon_Damage_Type.include?(user.weapons[0].id)
pwr = 0
for stat in Weapon_Damage_Type[user.weapons[0].id]
pwr += eval("(user.#{stat[0]} * #{stat[1]}).to_i")
end
else
pwr = user.str
end
case DAMAGE_ALGORITHM_TYPE
when 0,1,3
power = skill.power + ((wpn * skill.atk_f) / 100)
when 2
user_str = (pwr * 4 * skill.str_f / 100)
user_int = (user.int * 2 * skill.int_f / 100)
if skill.power > 0
power = skill.power + user_str + user_int
else
power = skill.power - user_str - user_int
end
end
return power
else
return acbs_set_skill_power_actor_status_n01(user, skill)
end
end
end
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
attr_accessor :weapon_fix
attr_accessor :armor_fix
attr_accessor :equip_kind
attr_accessor :equip_names
attr_accessor :weapons
attr_accessor :equip_id
attr_accessor :two_swords_style
#--------------------------------------------------------------------------
alias acbs_initialize_actorstatus_gameactor initialize
def initialize(actor_id)
reset_set_status
acbs_initialize_actorstatus_gameactor(actor_id)
@equipment_skills = []
@equip_id = []
@equip_kind = equip_kind
@equip_names = equip_names
@element_resist = element_resist
@state_resist = state_resist
for i in 0...@equip_kind.size
id = @equip_kind[i]
if id == 0 and i == 0
@equip_id[i] = @weapon_id
elsif id != 0 and (1..4).include?(id)
@equip_id[i] = eval("@armor#{id}_id")
else
@equip_id[i] = 0
end
end
@weapon_fix = [@weapon_fix]
@weapon_fix[1] = @armor1_fix if two_swords_style
@armor_fix = [false]
for i in 0...@equip_kind.size
id = @equip_kind[i]
if (1..4).include?(id) and not (id == 1 and two_swords_style)
@armor_fix[i] = eval("@armor#{id}_fix")
elsif id > 0 and not (id == 1 and two_swords_style)
@armor_fix[i] = false
end
end
@armor_fix[1] = @armor1_fix unless two_swords_style
@equip_id[1] = 0 if Two_Hands_Weapons.include?(@weapon_id) or two_swords_style
gain_equip_skills
update_equip_set
@elemental_resist = elemental_resist
@states_resist = states_resist
for equip in armors do update_auto_state(nil, equip) end
for equip in equips do update_multi_auto_state(nil, equip) end
end
#--------------------------------------------------------------------------
def element_resist
return @element_resist unless @element_resist.nil?
resist = Element_Resist.dup
@element_resist = []
for i in 1..$data_system.elements.size
if resist['Actor'] != nil && resist['Actor'][@actor_id] != nil &&
resist['Actor'][@actor_id][i] != nil
@element_resist[i] = resist['Actor'][@actor_id][i]
else
@element_resist[i] = 0
end
end
return @element_resist
end
#--------------------------------------------------------------------------
def element_resist=(elements)
return @element_resist unless elements.is_a?(Hash)
resist = elements.dup
@element_resist = []
for i in 1...$data_system.elements.size
if resist != nil && resist[i] != nil
@element_resist[i] = resist[i]
else
@element_resist[i] = 0
end
end
return @element_resist
end
#--------------------------------------------------------------------------
def state_resist
return @state_resist unless @state_resist.nil?
resist = State_Resist.dup
@state_resist = []
for i in 1...$data_states.size
if resist['Actor'] != nil && resist['Actor'][@actor_id] != nil &&
resist['Actor'][@actor_id][i] != nil
@state_resist[i] = resist['Actor'][@actor_id][i]
else
@state_resist[i] = 0
end
end
return @state_resist
end
#--------------------------------------------------------------------------
def state_resist=(states)
return @state_resist unless states.is_a?(Hash)
resist = states.dup
@state_resist = []
for i in 1...$data_states.size
if resist != nil && resist[i] != nil
@state_resist[i] = resist[i]
else
@state_resist[i] = 0
end
end
return @state_resist
end
#--------------------------------------------------------------------------
def equip_names
return @equip_names.nil? ? Equip_Names : @equip_names
end
#--------------------------------------------------------------------------
def equip_names=(n)
@equip_names = n
end
#--------------------------------------------------------------------------
def equip_kind
return @equip_kind.nil? ? Equip_Kinds : @equip_kind
end
#--------------------------------------------------------------------------
def equip_kind=(n)
for i in 0...@equip_kind.size
equip(i, 0) if @equip_kind[i] != n[i]
end
@equip_kind = n
set_equip_id
end
#--------------------------------------------------------------------------
def set_equip_id
for i in 0...@equip_kind.size
@equip_id[i] = 0 if @equip_id[i] == nil
end
end
#--------------------------------------------------------------------------
def two_swords_style
return true if $game_party.two_swords_actors.include?(@actor_id)
return true if $game_party.two_swords_classes.include?(@class_id)
return false
end
#--------------------------------------------------------------------------
def weapons
result = []
for i in 0...@equip_kind.size
id = @equip_kind[i]
if id == 0 or (id == 1 and two_swords_style)
result << $data_weapons[@equip_id[i]]
end
end
return result.compact
end
#--------------------------------------------------------------------------
def armors
result = []
for i in 0...@equip_kind.size
id = @equip_kind[i]
if id > 1 or (id == 1 and not two_swords_style)
result << $data_armors[@equip_id[i]]
end
end
return result.compact
end
#--------------------------------------------------------------------------
def equips
return weapons + armors
end
#--------------------------------------------------------------------------
def elemental_resist
@elemental_resist = [0]
for i in 1...$data_system.elements.size
value = $data_classes[@class_id].element_ranks[i]
case Addition_Type
when 0,2
value += @element_resist[i]
element_size = 1
for kind in 0...@equip_kind.size
id = @equip_kind[kind]
if id == 0 or (id == 1 and two_swords_style)
eqp = $data_weapons[@equip_id[kind]]
else
eqp = $data_armors[@equip_id[kind]]
end
value += eqp.element_resist[i] if eqp != nil
element_size += 1 if eqp != nil and eqp.element_resist[i] != 0
end
for state in @states
value += $data_states[state].element_resist[i]
element_size += 1 if $data_states[state].element_resist[i] != 0
end
for set in @set_elemental_resist
value += set[i] if set[i] != nil
element_size += 1 if set[i] != nil and set[i] != 0
end
value /= element_size if Addition_Type == 2
when 1,3
h, l = 0, 0
h = @element_resist[i] if @element_resist[i] > 0
l = @element_resist[i] if @element_resist[i] < 0
for kind in 0...@equip_kind.size
id = @equip_kind[kind]
if id == 0 or (id == 1 and two_swords_style)
eqp = $data_weapons[@equip_id[kind]]
else
eqp = $data_armors[@equip_id[kind]]
end
if eqp.element_resist[i] > h and eqp.element_resist[i] > 0
h = eqp.element_resist[i]
elsif eqp.element_resist[i] < l and eqp.element_resist[i] < 0
l = eqp.element_resist[i]
end
end
for state in @states
st = $data_states[state]
if st.element_resist[i] > h and st.element_resist[i] > 0
h = st.element_resist[i]
elsif st.element_resist[i] < l and st.element_resist[i] < 0
l = st.element_resist[i]
end
end
for set in @set_elemental_resist
if set[i] != nil and set[i] > h and set[i] > 0
h = set[i]
elsif set[i] != nil and set[i] < l and set[i] < 0
l = set[i]
end
end
value = h + l
value /= 2 if h != 0 and l != 0 and Addition_Type == 2
end
@elemental_resist << [[value.to_i, 6].min, 1].max
end
return @elemental_resist
end
#--------------------------------------------------------------------------
def states_resist
@states_resist = [0]
for i in 1...$data_states.size
value = $data_classes[@class_id].state_ranks[i]
case Addition_Type
when 0,2
value += @state_resist[i]
state_size = 1
for kind in 0...@equip_kind.size
id = @equip_kind[kind]
if id == 0 or (id == 1 and two_swords_style)
eqp = $data_weapons[@equip_id[kind]]
else
eqp = $data_armors[@equip_id[kind]]
end
value += eqp.state_resist[i] if eqp != nil
state_size += 1 if eqp != nil and eqp.state_resist[i] != 0
end
for state in @states
value += $data_states[state].state_resist[i]
state_size += 1 if $data_states[state].state_resist[i] != 0
end
for set in @set_state_resist
value += set[i] if set[i] != nil
element_size += 1 if set[i] != nil and set[i] != 0
end
value /= state_size if Addition_Type == 2
when 1,3
h, l = 0, 0
h = @state_resist[i] if @state_resist[i] > 0
l = @state_resist[i] if @state_resist[i] < 0
for kind in 0...@equip_kind.size
id = @equip_kind[kind]
if id == 0 or (id == 1 and two_swords_style)
eqp = $data_weapons[@equip_id[kind]]
else
eqp = $data_armors[@equip_id[kind]]
end
if eqp.state_resist[i] > h and eqp.state_resist[i] > 0
h = eqp.state_resist[i]
elsif eqp.state_resist[i] < l and eqp.state_resist[i] < 0
l = eqp.state_resist[i]
end
end
for state in @states
st = $data_states[state]
if st.state_resist[i] > h and st.state_resist[i] > 0
h = st.state_resist[i]
elsif st.state_resist[i] < l and st.state_resist[i] < 0
l = st.state_resist[i]
end
end
for set in @set_state_resist
if set[i] != nil and set[i] > h and set[i] > 0
h = set[i]
elsif set[i] != nil and set[i] < l and set[i] < 0
l = set[i]
end
end
value = h + l
value /= 2 if h != 0 and l != 0
end
@states_resist << [[value.to_i, 6].min, 1].max
end
return @states_resist
end
#--------------------------------------------------------------------------
def element_rate_rank(element_id)
table = [0,200,150,100,50,0,-100]
result = table[elemental_resist[element_id]]
return result
end
#--------------------------------------------------------------------------
def state_rate_ranks(state_id)
table = [0,100,80,60,40,20,0]
result = table[states_resist[state_id]]
return result
end
#--------------------------------------------------------------------------
def state_guard?(state_id)
for i in 0...@equip_kind.size
id = @equip_kind[i]
if id > 1 or (id == 1 and not two_swords_style)
armor = $data_armors[@equip_id[i]]
return true if armor != nil && armor.guard_state_set.include?(state_id)
end
end
return false
end
#--------------------------------------------------------------------------
def sp_change_equip
sp_equip = 100
for equip in equips.compact
if equip.is_a?(RPG::Weapon) and Sp_Cost_Change_Equip['Weapon'] != nil and
Sp_Cost_Change_Equip['Weapon'].include?(equip.id)
sp_equip = (((100 - Sp_Cost_Change_Equip['Weapon'][equip.id]) * sp_equip)/ 100)
elsif equip.is_a?(RPG::Armor) and Sp_Cost_Change_Equip['Armor'] != nil and
Sp_Cost_Change_Equip['Armor'].include?(equip.id)
sp_equip = (((100 - Sp_Cost_Change_Equip['Armor'][equip.id]) * sp_equip)/ 100)
end
end
return [sp_equip, 0].max
end
#--------------------------------------------------------------------------
unless @alias_acbs_calc_sp_cost_actorstatus
alias acbs_calc_sp_cost_actorstatus calc_sp_cost
@alias_acbs_calc_sp_cost_actorstatus = true
end
def calc_sp_cost(user, skill)
cost = acbs_calc_sp_cost_actorstatus(user, skill)
return (cost * sp_change_equip) / 100
end
#--------------------------------------------------------------------------
def exp=(exp)
lose_equip_skills
forget_set_skills
@exp = [exp, 0].max
while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0
@level += 1
for j in $data_classes[@class_id].learnings
if j.level == @level
learn_skill(j.skill_id)
end
end
end
while @exp < @exp_list[@level]
@level -= 1
end
@hp = [@hp, self.maxhp].min
@sp = [@sp, self.maxsp].min
gain_equip_skills
update_equip_set
end
#--------------------------------------------------------------------------
def make_exp_list
actor = $data_actors[@actor_id]
@exp_list[1] = 0
pow_i = 2.4 + actor.exp_inflation / 100.0
(2..(self.final_level + 1)).each { |i|
if i > self.final_level
@exp_list[i] = 0
else
n = actor.exp_basis * ((i + 3) ** pow_i) / (5 ** pow_i)
@exp_list[i] = @exp_list[i-1] + Integer(n)
end
}
end
#--------------------------------------------------------------------------
def level=(level)
level = [[level, self.final_level].min, 1].max
self.exp = @exp_list[level]
end
#--------------------------------------------------------------------------
def final_level
return Max_Level[@actor_id] != nil ? Max_Level[@actor_id] : Max_Level_Default
end
#--------------------------------------------------------------------------
def base_parameter(type)
if @level >= 100
calc_text = ("(param[99] - param[98]) * (level - 99)").dup
calc_text.gsub!(/level/i) {"@level"}
calc_text.gsub!(/param\[(\d+)\]/i) {
"$data_actors[@actor_id].parameters[type, #{$1.to_i}]"}
return $data_actors[@actor_id].parameters[type, 99] + eval(calc_text)
end
return $data_actors[@actor_id].parameters[type, @level]
end
#--------------------------------------------------------------------------
def base_maxhp
n = base_parameter(0)
n *= Actor_Mult_Hp
return [[n.to_i, 1].max, Actor_Max_Hp].min
end
#--------------------------------------------------------------------------
def maxhp
n = base_maxhp + @maxhp_plus + @set_maxhp
for i in @states do n *= $data_states[i].maxhp_rate / 100.0 end
return [[n.to_i, 1].max, Actor_Max_Hp].min
end
#--------------------------------------------------------------------------
def base_maxsp
n = base_parameter(1)
n *= Actor_Mult_Sp
return [[n.to_i, 1].max, Actor_Max_Sp].min
end
#--------------------------------------------------------------------------
def maxsp
n = base_maxsp + @maxsp_plus + @set_maxsp
for i in @states do n *= $data_states[i].maxsp_rate / 100.0 end
return [[n.to_i, 0].max, Actor_Max_Sp].min
end
#--------------------------------------------------------------------------
def base_str
n = base_parameter(2)
n *= Actor_Mult_Str
for item in equips.compact do n += item.str_plus end
return [[n.to_i, 1].max, Actor_Max_Str].min
end
#--------------------------------------------------------------------------
def str
n = base_str + @str_plus + @set_str
for i in @states do n *= $data_states[i].str_rate / 100.0 end
return [[n.to_i, 1].max, Actor_Max_Str].min
end
#--------------------------------------------------------------------------
def base_dex
n = base_parameter(3)
n *= Actor_Mult_Dex
for item in equips.compact do n += item.dex_plus end
return [[n.to_i, 1].max, Actor_Max_Dex].min
end
#--------------------------------------------------------------------------
def dex
n = base_dex + @dex_plus + @set_dex
for i in @states do n *= $data_states[i].dex_rate / 100.0 end
return [[n.to_i, 1].max, Actor_Max_Dex].min
end
#--------------------------------------------------------------------------
def base_agi
n = base_parameter(4)
n *= Actor_Mult_Agi
for item in equips.compact do n += item.agi_plus end
return [[n.to_i, 1].max, Actor_Max_Agi].min
end
#--------------------------------------------------------------------------
def agi
n = base_agi + @agi_plus + @set_agi
for i in @states do n *= $data_states[i].agi_rate / 100.0 end
return [[n.to_i, 1].max, Actor_Max_Agi].min
end
#--------------------------------------------------------------------------
def base_int
n = base_parameter(5)
n *= Actor_Mult_Int
for item in equips.compact do n += item.int_plus end
return [[n.to_i, 1].max, Actor_Max_Int].min
end
#--------------------------------------------------------------------------
def int
n = base_int + @int_plus + @set_int
for i in @states do n *= $data_states[i].int_rate / 100.0 end
return [[n.to_i, 1].max, Actor_Max_Int].min
end
#--------------------------------------------------------------------------
def maxhp=(maxhp)
@maxhp_plus += maxhp - self.maxhp
@maxhp_plus = [[@maxhp_plus, -Actor_Max_Hp].max, Actor_Max_Hp].min
@hp = [@hp, self.maxhp].min
end
#--------------------------------------------------------------------------
def maxsp=(maxsp)
@maxsp_plus += maxsp - self.maxsp
@maxsp_plus = [[@maxsp_plus, -Actor_Max_Sp].max, Actor_Max_Sp].min
@sp = [@sp, self.maxsp].min
end
#--------------------------------------------------------------------------
def str=(str)
@str_plus += str - self.str
@str_plus = [[@str_plus, -Actor_Max_Str].max, Actor_Max_Str].min
end
#--------------------------------------------------------------------------
def dex=(dex)
@dex_plus += dex - self.dex
@dex_plus = [[@dex_plus, -Actor_Max_Dex].max, Actor_Max_Dex].min
end
#--------------------------------------------------------------------------
def agi=(agi)
@agi_plus += agi - self.agi
@agi_plus = [[@agi_plus, -Actor_Max_Agi].max, Actor_Max_Agi].min
end
#--------------------------------------------------------------------------
def int=(int)
@int_plus += int - self.int
@int_plus = [[@int_plus, -Actor_Max_Int].max, Actor_Max_Int].min
end
#--------------------------------------------------------------------------
def base_atk
n = 0
for item in weapons.compact do n += item.atk end
n += @set_atk
unarmed = UNARMED_ATTACK
n = unarmed if weapons.empty?
return [[n.to_i, 0].max, Actor_Max_Atk].min
end
#--------------------------------------------------------------------------
def base_pdef
n = 0
for item in equips.compact do n += item.pdef end
n += @set_pdef
return [[n.to_i, 0].max, Actor_Max_PDef].min
end
#--------------------------------------------------------------------------
def base_mdef
n = 0
for item in equips.compact do n += item.mdef end
n += @set_mdef
return [[n.to_i, 0].max, Actor_Max_MDef].min
end
#--------------------------------------------------------------------------
def base_eva
n = 0
for item in armors.compact do n += item.eva end
n += @set_eva
return n
end
#------------------------------------------------------------------------------
def update_multi_auto_state(old, new)
if old != nil
for state in old.multi_auto_state_id do remove_state(state, true) end
end
if new != nil and not self.dead?
for state in new.multi_auto_state_id do add_state(state, true) end
end
end
#------------------------------------------------------------------------------
def hit
n = super
for item in equips.compact do n += item.hit end
n += @set_hit
return n.to_i
end
#--------------------------------------------------------------------------
def crt
n = super
for item in equips.compact do n += item.crt end
n += @set_crt
return n.to_i
end
#--------------------------------------------------------------------------
def dmg
n = super
for item in equips.compact do n += item.dmg end
n += @set_dmg
return n.to_i
end
#--------------------------------------------------------------------------
def rcrt
n = super
for item in equips.compact do n += item.rcrt end
n += @set_rcrt
return n.to_i
end
#--------------------------------------------------------------------------
def rdmg
n = super
for item in equips.compact do n += item.rdmg end
n += @set_rdmg
return n.to_i
end
#--------------------------------------------------------------------------
def lock_equip(type)
equip = (type == 0 or (type == 1 and two_swords_style)) ? 'Weapon' : 'Armor'
id = @equip_kind[type]
if Equip_Lock[equip] != nil
eqp = Equip_Lock[equip].dup
else
return false
end
return (eqp.include?(@actor_id) and eqp[@actor_id].include?(id))
end
#--------------------------------------------------------------------------
def equip(equip_type, id)
type = @equip_kind[equip_type]
if type == 0
if id == 0 or $game_party.weapon_number(id) > 0
update_multi_auto_state($data_weapons[@equip_id[equip_type]], $data_weapons[id])
$game_party.gain_weapon(@equip_id[equip_type], 1)
@equip_id[equip_type] = id
$game_party.lose_weapon(id, 1)
end
elsif type == 1
if two_swords_style
if id == 0 or $game_party.weapon_number(id) > 0
update_multi_auto_state($data_weapons[@equip_id[equip_type]], $data_weapons[id])
$game_party.gain_weapon(@equip_id[equip_type], 1)
@equip_id[equip_type] = id
$game_party.lose_weapon(id, 1)
end
else
if id == 0 or $game_party.armor_number(id) > 0
update_auto_state($data_armors[@equip_id[equip_type]], $data_armors[id])
update_multi_auto_state($data_armors[@equip_id[equip_type]], $data_armors[id])
$game_party.gain_armor(@equip_id[equip_type], 1)
@equip_id[equip_type] = id
$game_party.lose_armor(id, 1)
end
end
elsif type > 1
if id == 0 or $game_party.armor_number(id) > 0
update_auto_state($data_armors[@equip_id[equip_type]], $data_armors[id])
update_multi_auto_state($data_armors[@equip_id[equip_type]], $data_armors[id])
$game_party.gain_armor(@equip_id[equip_type], 1)
@equip_id[equip_type] = id
$game_party.lose_armor(id, 1)
end
end
gain_equip_skills
update_equip_set
end
#--------------------------------------------------------------------------
def gain_equip_skills
lose_equip_skills
for kind in 0...@equip_kind.size
id = @equip_kind[kind]
if id == 0 or (id == 1 and two_swords_style)
eqp = $data_weapons[@equip_id[kind]]
else
eqp = $data_armors[@equip_id[kind]]
end
if Equip_Skills[eqp.type] != nil and Equip_Skills[eqp.type][eqp.id] != nil
skills = Equip_Skills[eqp.type][eqp.id].dup
for skill in skills
get_new_equip_skill(skill[1]) if skill[0] <= @level
end
end
end
end
#--------------------------------------------------------------------------
def lose_equip_skills
for lose_skills in @equipment_skills
self.forget_skill(lose_skills)
end
@equipment_skills.clear
end
#--------------------------------------------------------------------------
def get_new_equip_skill(skill)
unless self.skill_learn?(skill) or @equipment_skills.include?(skill)
@equipment_skills << skill
self.learn_skill(skill)
end
end
#--------------------------------------------------------------------------
def update_equip_set
for state in @set_auto_states
remove_state(state, true)
end
reset_set_status
weapons_id = []
armors_id = []
for weapon in weapons
weapons_id << weapon.id if weapon != nil
end
for armor in armors
armors_id << armor.id if armor != nil
end
for set in Equip_Set
armors_set = weapons_set = false
if set[1]['Weapon'] != nil
weapons_set_id = set[1]['Weapon'].dup
weapons_set_id.uniq!
set_size = 0
for id in weapons_set_id
set_size += 1 if weapons_id.include?(id)
end
weapons_set = true if set_size == weapons_set_id.size
else
weapons_set = true
end
if set[1]['Armor'] != nil
armors_set_id = set[1]['Armor'].dup
armors_set_id.uniq!
set_size = 0
for id in armors_set_id
set_size += 1 if armors_id.include?(id)
end
armors_set = true if set_size == armors_set_id.size
else
armors_set = true
end
apply_set_efect(set[0]) if armors_set and weapons_set
end
for state in @set_auto_states
add_state(state, true)
end
learn_set_skill
end
#--------------------------------------------------------------------------
def reset_set_status
status = ['maxhp','maxsp','atk','pdef','mdef','str','dex','int','agi','eva','hit',
'crt','dmg','rcrt','rdmg']
for st in status
eval("@set_#{st} = 0")
end
@set_auto_states = []
@set_elemental_resist = []
@set_state_resist = []
forget_set_skills
end
#--------------------------------------------------------------------------
def apply_set_efect(set_id)
return if Set_Effect[set_id].nil?
set = Set_Effect[set_id].dup
if set['status'] != nil
for st in Set_Effect[set_id]['status']
eval("@set_#{st[0]} += #{st[1]} if @set_#{st[0]} != nil")
end
end
@set_skills << set['skills'] if set['skills']
@set_elemental_resist << set['elements'] if set['elements'] != nil
@set_state_resist << set['states'] if set['states'] != nil
@set_auto_states << set['auto states'] if set['auto states'] != nil
@set_auto_states.flatten!
@set_auto_states.uniq!
end
#--------------------------------------------------------------------------
def forget_set_skills
@set_skills = [] if @set_skills.nil?
for skills in @set_skills
for skill in skills
self.forget_skill(skill[1])
end
end
@set_skills.clear
end
#--------------------------------------------------------------------------
def learn_set_skill
for skills in @set_skills
for skill in skills
get_new_equip_skill(skill[1]) if skill[0] <= @level
end
end
end
#--------------------------------------------------------------------------
def equippable?(item)
if item.is_a?(RPG::Weapon)
return true if $data_classes[@class_id].weapon_set.include?(item.id)
end
if item.is_a?(RPG::Armor)
if $data_classes[@class_id].armor_set.include?(item.id) and not
(item.type_id == 1 and two_swords_style)
return true
end
end
return false
end
#--------------------------------------------------------------------------
def remove_left_equip_actor
for i in 0...@equip_kind.size
equip(i, 0) if @equip_kind[i] == 1
end
end
#--------------------------------------------------------------------------
def remove_left_equip_class(class_id)
if class_id == @class_id
for i in 0...@equip_kind.size
equip(i, 0) if @equip_kind[i] == 1
end
end
end
#--------------------------------------------------------------------------
def remove_equip_class_change(class_id, old_class_id)
if ($game_party.two_swords_classes.include?(class_id) and not
$game_party.two_swords_classes.include?(old_class_id)) or
($game_party.two_swords_classes.include?(old_class_id) and not
$game_party.two_swords_classes.include?(class_id))
for i in 0...@equip_kind.size
equip(i, 0) if @equip_kind[i] == 1
end
end
end
#--------------------------------------------------------------------------
def class_id=(class_id)
remove_equip_class_change(class_id, @class_id)
if $data_classes[class_id] != nil
@class_id = class_id
for i in 0...@equip_kind.size
if @equip_kind[i] == 0 or (@equip_kind[i] == 1 and two_swords_style)
equip(i, 0) unless equippable?($data_weapons[@equip_id[i]])
else
equip(i, 0) unless equippable?($data_weapons[@equip_id[i]])
end
end
end
end
end
#==============================================================================
# ■ Game_Enemy
#==============================================================================
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
def element_rate_rank(element_id)
table = [0,200,150,100,50,0,-100]
result = table[$data_enemies[@enemy_id].element_ranks[element_id]]
value = $data_enemies[@enemy_id].element_ranks[element_id]
case Addition_Type
when 0,2
for i in @states
value += $data_states[i].element_resist[element_id]
element_size += 1 if $data_states[i].element_resist[element_id] != 0
end
value /= element_size if Addition_Type == 2
when 1,3
h, l = 0, 0
h = @element_resist[element_id] if @element_resist[element_id] > 0
l = @element_resist[element_id] if @element_resist[element_id] < 0
for i in @states
st = $data_states[i]
if st.element_resist[element_id] > h and st.element_resist[element_id] > 0
h = st.element_resist[element_id]
elsif st.element_resist[element_id] < l and st.element_resist[element_id] < 0
l = st.element_resist[element_id]
end
end
value = h + l
value /= 2 if h != 0 and l != 0
end
result = table[[[value.to_i, 6].min,1].max]
return result
end
#--------------------------------------------------------------------------
def state_rate_ranks(state_id)
table = [0,100,80,60,40,20,0]
result = table[$data_enemies[@enemy_id].state_ranks[state_id]]
value = $data_enemies[@enemy_id].state_ranks[state_id]
case Addition_Type
when 0,2
for i in @states
value += $data_states[i].state_resist[state_id]
state_size += 1 if $data_states[i].state_resist[state_id] != 0
end
value /= state_size if Addition_Type == 2
when 1,3
h, l = 0, 0
h = @state_resist[state_id] if @state_resist[state_id] > 0
l = @state_resist[state_id] if @state_resist[state_id] < 0
for i in @states
st = $data_states[i]
if st.state_resist[state_id] > h and st.state_resist[state_id] > 0
h = st.state_resist[state_id]
elsif st.state_resist[state_id] < l and st.state_resist[state_id] < 0
l = st.state_resist[state_id]
end
end
value = h + l
value /= 2 if h != 0 and l != 0 and Addition_Type == 2
end
result = table[[[value.to_i, 6].min,1].max]
return result
end
end
#==============================================================================
# ■ Window_Base
#==============================================================================
class Window_Base < Window
#--------------------------------------------------------------------------
include N01
#--------------------------------------------------------------------------
def draw_actor_parameter(actor, x, y, type, w = 132)
case type
when 0
parameter_name = $data_system.words.atk
parameter_value = actor.atk
when 1
parameter_name = $data_system.words.pdef
parameter_value = actor.pdef
when 2
parameter_name = $data_system.words.mdef
parameter_value = actor.mdef
when 3
parameter_name = $data_system.words.str
parameter_value = actor.str
when 4
parameter_name = $data_system.words.dex
parameter_value = actor.dex
when 5
parameter_name = $data_system.words.agi
parameter_value = actor.agi
when 6
parameter_name = $data_system.words.int
parameter_value = actor.int
when 7
parameter_name = Stat_Eva
parameter_value = actor.eva
when 8
parameter_name = Stat_Hit
parameter_value = actor.hit
when 9
parameter_name = Stat_Crt
parameter_value = actor.crt
when 10
parameter_name = Stat_Dmg
parameter_value = actor.dmg
when 11
parameter_name = Stat_Res_Crt
parameter_value = actor.rcrt
when 12
parameter_name = Stat_Res_Dmg
parameter_value = actor.rdmg
end
self.contents.font.color = system_color
self.contents.draw_text(x, y, w + 32, 32, parameter_name)
self.contents.font.color = normal_color
self.contents.draw_text(x + w, y, 64, 32, parameter_value.to_s, 2)
end
end
#==============================================================================
# ■ Window_Status
#==============================================================================
class Window_Status < Window_Base
#--------------------------------------------------------------------------
def refresh
self.contents.clear
draw_actor_graphic(@actor, 40, 112)
draw_actor_name(@actor, 4, 0)
draw_actor_class(@actor, 4 + 144, 0)
draw_actor_level(@actor, 96, 32)
draw_actor_state(@actor, 96, 64)
draw_actor_hp(@actor, 96, 112, 172)
draw_actor_sp(@actor, 96, 144, 172)
for i in 0..2
draw_actor_parameter(@actor, 96, 164 + [(236/(Extra_Status.size + 6)), 20].max * i, i)
end
for i in 3..6
draw_actor_parameter(@actor, 96, 168 + [(236/(Extra_Status.size + 6)), 20].max * i, i)
end
for i in 7..(Extra_Status.size + 6)
draw_actor_parameter(@actor, 96, 172 + [(236/(Extra_Status.size + 6)), 20].max * i,
Extra_Status[i - 7])
end
self.contents.font.color = system_color
self.contents.draw_text(320, 48, 80, 32, 'EXP')
self.contents.draw_text(320, 80, 80, 32, 'Próximo')
self.contents.draw_text(400, 128, 128, 32, 'Equipamentos')
self.contents.font.color = normal_color
self.contents.draw_text(400, 48, 84, 32, @actor.exp_s, 2)
self.contents.draw_text(400, 80, 84, 32, @actor.next_rest_exp_s, 2)
self.contents.font.color = system_color
data = []
for i in 0...@actor.equip_kind.size
id = @actor.equip_kind[i]
if id == 0
data.push($data_weapons[@actor.equip_id[i]])
elsif id == 1 and @actor.two_swords_style
data.push($data_weapons[@actor.equip_id[i]])
elsif id != 0 or (id == 1 and not @actor.two_swords_style)
data.push($data_armors[@actor.equip_id[i]])
end
end
self.contents.font.color = system_color
return if data.size == 0
for i in 0...@actor.equip_names.size
name = @actor.equip_names[i]
self.contents.draw_text(320, 160 + [(280/data.size), 24].max * i, 92, 32, name)
end
for i in 0...data.size
draw_item_name(data[i], 412, 160 + [(280/data.size), 24].max * i)
end
end
#--------------------------------------------------------------------------
def dummy
self.contents.font.color = system_color
self.contents.draw_text(400, 128, 128, 32, 'Equipamentos')
data = []
for i in 0...@actor.equip_kind.size
id = @actor.equip_kind[i]
if id == 0
data.push($data_weapons[@actor.equip_id[i]])
elsif id == 1 and @actor.two_swords_style
data.push($data_weapons[@actor.equip_id[i]])
elsif id != 0 or (id == 1 and not @actor.two_swords_style)
data.push($data_armors[@actor.equip_id[i]])
end
end
self.contents.font.color = system_color
return if data.size == 0
for i in 0...@actor.equip_names.size
name = @actor.equip_names[i]
self.contents.draw_text(320, 160 + [(280/data.size), 24].max * i, 92, 32, name)
end
for i in 0...data.size
draw_item_name(data[i], 412, 160 + [(280/data.size), 24].max * i)
end
end
end
#==============================================================================
# Window_Selectable_Equip
#==============================================================================
class Window_Selectable_Equip < Window_Base
#--------------------------------------------------------------------------
attr_reader :index
attr_reader :help_window
#--------------------------------------------------------------------------
def initialize(x, y, width, height)
super(x, y, width, height)
@item_max = 1
@column_max = 1
@index = -1
end
#--------------------------------------------------------------------------
def index=(index)
@index = index
update_help if self.active and @help_window != nil
update_cursor_rect
end
#--------------------------------------------------------------------------
def row_max
return (@item_max + @column_max - 1) / @column_max
end
#--------------------------------------------------------------------------
def top_row
return self.oy / 32
end
#--------------------------------------------------------------------------
def top_row=(row)
row = 0 if row < 0
row = row_max - 1 if row > row_max - 1
self.oy = row * 32
end
#--------------------------------------------------------------------------
def page_row_max
return (self.height - 32) / 32
end
#--------------------------------------------------------------------------
def page_item_max
return page_row_max * @column_max
end
#---------------------------------------------------------------------------
def help_window=(help_window)
@help_window = help_window
update_help if self.active and @help_window != nil
end
#---------------------------------------------------------------------------
def update_cursor_rect
return self.cursor_rect.empty if @index < 0
row = @index / @column_max
self.top_row = row if row < self.top_row
if row > self.top_row + (self.page_row_max - 1)
self.top_row = row - (self.page_row_max - 1)
end
cursor_width = self.width / @column_max - 32
x = @index % @column_max * (cursor_width + 32)
y = @index / @column_max * 32 - self.oy
self.cursor_rect.set(x, y, cursor_width, 32)
end
#---------------------------------------------------------------------------
def update
super
if self.active and @item_max > 0 and @index >= 0
if Input.repeat?(Input::DOWN)
if (@column_max == 1 and Input.trigger?(Input::DOWN)) or
@index < @item_max - @column_max
$game_system.se_play($data_system.cursor_se)
@index = (@index + @column_max) % @item_max
end
end
if Input.repeat?(Input::UP)
if (@column_max == 1 and Input.trigger?(Input::UP)) or
@index >= @column_max
$game_system.se_play($data_system.cursor_se)
@index = (@index - @column_max + @item_max) % @item_max
end
end
if Input.repeat?(Input::RIGHT)
if @column_max >= 2 and @index < @item_max - 1
$game_system.se_play($data_system.cursor_se)
@index += 1
end
end
if Input.repeat?(Input::LEFT)
if @column_max >= 2 and @index > 0
$game_system.se_play($data_system.cursor_se)
@index -= 1
end
end
if Input.repeat?(Input::R)
@index == @item_max if @index < @item_max
end
if Input.repeat?(Input::L)
@index == @item_max if @index < @item_max
end
end
if self.active and @help_window != nil
update_help
end
update_cursor_rect
end
end
#==============================================================================
# ■ Window_EquipRight
#==============================================================================
class Window_EquipRight < Window_Selectable_Equip
#--------------------------------------------------------------------------
attr_accessor :data
#--------------------------------------------------------------------------
include N01
#--------------------------------------------------------------------------
def initialize(actor)
case Equip_Menu_Syle
when 0,2
super(272, 64, 368, 192)
when 1
super(272, 64, 368, 224)
when 3
super(272, 64, 368, 192)
when 4
super(0, 64, 368, 192)
end
self.contents = Bitmap.new(width - 32, actor.equip_kind.size * 32)
@actor = actor
self.opacity = Equip_Window_Opacity
refresh
self.index = 0
end
#--------------------------------------------------------------------------
def item
return @data[self.index]
end
#--------------------------------------------------------------------------
def refresh
self.contents.clear
@data = []
for i in 0...@actor.equip_kind.size
id = @actor.equip_kind[i]
if id == 0
@data.push($data_weapons[@actor.equip_id[i]])
elsif id == 1 and @actor.two_swords_style
@data.push($data_weapons[@actor.equip_id[i]])
elsif id != 0 or (id == 1 and not @actor.two_swords_style)
@data.push($data_armors[@actor.equip_id[i]])
end
end
@item_max = @data.size
self.contents.font.color = system_color
for i in 0...@actor.equip_names.size
name = @actor.equip_names[i]
self.contents.draw_text(4, 32 * i, 92, 32, name)
end
for i in 0...@data.size
draw_item_name(@data[i], 92, 32 * i)
end
end
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(self.item == nil ? '' : self.item.description)
end
end
#==============================================================================
# ■ Window_EquipLeft
#==============================================================================
class Window_EquipLeft < Window_Selectable
#--------------------------------------------------------------------------
include N01
#--------------------------------------------------------------------------
attr_accessor :new_equip
attr_accessor :last_atk
attr_accessor :last_pdef
attr_accessor :last_mdef
attr_accessor :last_str
attr_accessor :last_dex
attr_accessor :last_agi
attr_accessor :last_int
attr_accessor :last_eva
attr_accessor :last_hit
attr_accessor :last_crt
attr_accessor :last_dmg
attr_accessor :last_rcrt
attr_accessor :last_rdmg
#--------------------------------------------------------------------------
def initialize(actor)
case Equip_Menu_Syle
when 0,2
super(0, 64, 272, 192)
when 1
super(0, 64, 272, 224)
when 3
super(0, 64, 272, 416)
when 4
super(368, 64, 272, 416)
end
self.contents = Bitmap.new(width - 32, height - 32)
self.opacity = Equip_Window_Opacity
@actor = actor
@new_equip, @last_equip = nil, nil
@last_atk = @actor.atk
@last_pdef = @actor.pdef
@last_mdef = @actor.mdef
@last_str = @actor.str
@last_dex = @actor.dex
@last_agi = @actor.agi
@last_int = @actor.int
@last_eva = @actor.eva
@last_hit = @actor.hit
@last_ctr = @actor.crt
@last_dmg = @actor.dmg
@last_rcrt = @actor.rcrt
@last_rdmg = @actor.rdmg
refresh
end
#--------------------------------------------------------------------------
def refresh
self.contents.clear
@equip_stat, @base_stat, @new_stat = false, false, false
case Equip_Menu_Syle
when 0
@equip_stat = true
y_adjust = 64
draw_actor_name(@actor, 12, 0)
draw_actor_level(@actor, 12, 32)
when 1
@equip_stat, @base_stat = true, true
y_adjust = 0
when 2
@base_stat = true
y_adjust = 32
draw_actor_name(@actor, 12, 0)
when 3,4
@equip_stat, @base_stat, @new_stat = true, true, true
y_adjust = 0
end
self.contents.font.color = system_color
y = 0
for i in 0..12
if ((0..2).include?(i) and @equip_stat) or ((3..6).include?(i) and @base_stat) or
((7..12).include?(i) and @new_stat)
draw_actor_parameter(@actor, 12, y * 28 + y_adjust, i, 104)
draw_change_arrow(y, y_adjust, i)
y += 1
end
end
end
#--------------------------------------------------------------------------
def draw_change_arrow(y, adjust, type)
case type
when 0
old_value = @actor.atk
new_value = @new_atk
when 1
old_value = @actor.pdef
new_value = @new_pdef
when 2
old_value = @actor.mdef
new_value = @new_mdef
when 3
old_value = @actor.str
new_value = @new_str
when 4
old_value = @actor.dex
new_value = @new_dex
when 5
old_value = @actor.agi
new_value = @new_agi
when 6
old_value = @actor.int
new_value = @new_int
when 7
old_value = @actor.eva
new_value = @new_eva
when 8
old_value = @actor.hit
new_value = @new_hit
when 9
old_value = @actor.crt
new_value = @new_crt
when 10
old_value = @actor.dmg
new_value = @new_dmg
when 11
old_value = @actor.rcrt
new_value = @new_rcrt
when 12
old_value = @actor.rdmg
new_value = @new_rdmg
end
if new_value != nil
if old_value == new_value
self.contents.font.color = text_color(7)
self.contents.draw_text(172, y * 28 + adjust, 40, 32, Stat_Nil, 1)
self.contents.font.color = normal_color
elsif old_value < new_value
self.contents.font.color = text_color(4)
self.contents.draw_text(172, y * 28 + adjust, 40, 32, Stat_Up, 1)
self.contents.font.color = text_color(3)
elsif old_value > new_value
self.contents.font.color = text_color(6)
self.contents.draw_text(172, y * 28+ adjust, 40, 32, Stat_Down, 1)
self.contents.font.color = text_color(2)
end
self.contents.draw_text(192, y * 28 + adjust, 48, 32, new_value.to_s, 2)
end
end
#--------------------------------------------------------------------------
def set_new_parameters(new_atk = nil, new_pdef = nil, new_mdef = nil, new_str = nil,
new_dex = nil, new_agi = nil, new_int = nil, new_eva = nil, new_hit = nil,
new_crt = nil, new_dmg = nil, new_rcrt = nil, new_rdmg = nil)
if @new_str != new_str or @new_dex != new_dex or @new_agi != new_agi or
@new_int != new_int or @new_atk != new_atk or @new_pdef != new_pdef or
@new_mdef != new_mdef or @new_eva != new_eva or @new_hit != new_hit or
@new_crt != new_crt or @new_dmg != new_dmg or @new_rcrt != new_rcrt or
@new_rdmg != new_rdmg
@last_equip = @new_equip
@new_atk = new_atk
@new_pdef = new_pdef
@new_mdef = new_mdef
@new_str = new_str
@new_dex = new_dex
@new_agi = new_agi
@new_int = new_int
@new_eva = new_eva
@new_hit = new_hit
@new_crt = new_crt
@new_dmg = new_dmg
@new_rcrt = new_rcrt
@new_rdmg = new_rdmg
refresh
end
end
end
#==============================================================================
# Window_EquipItem
#==============================================================================
class Window_EquipItem < Window_Selectable
#--------------------------------------------------------------------------
attr_accessor :data
#--------------------------------------------------------------------------
def initialize(actor, equip_type)
case Equip_Menu_Syle
when 0,2
super(0, 256, 640, 224)
@column_max = 2
when 1
super(0, 288, 640, 192)
@column_max = 2
when 3
super(272, 256, 368, 224)
@column_max = 1
when 4
super(0, 256, 368, 224)
@column_max = 1
end
@actor = actor
@equip_type = equip_type
refresh
self.active = false
self.index = -1
end
#--------------------------------------------------------------------------
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = []
if @equip_type == 0 or (@equip_type == 1 and @actor.two_swords_style)
weapon_set = $data_classes[@actor.class_id].weapon_set
for i in 1...$data_weapons.size
next if Two_Hands_Weapons.include?(i) and @equip_type == 1
next if Right_Hand_Weapons.include?(i) and @equip_type == 1
next if Left_Hand_Weapons.include?(i) and @equip_type == 0
if $game_party.weapon_number(i) > 0 and weapon_set.include?(i)
@data.push($data_weapons[i])
end
end
end
if @equip_type > 1 or (@equip_type == 1 and not @actor.two_swords_style)
armor_set = $data_classes[@actor.class_id].armor_set
for i in 1...$data_armors.size
if $game_party.armor_number(i) > 0 and armor_set.include?(i)
if $data_armors[i].type_id == @equip_type
@data.push($data_armors[i])
end
end
end
end
@data.push(nil) unless @actor.lock_equip(@equip_type)
@item_max = @data.size
self.contents = Bitmap.new(width - 32, [row_max, 1].max * 32)
self.opacity = Equip_Window_Opacity
for i in 0...(@actor.lock_equip(@equip_type) ? @item_max : @item_max - 1)
draw_item(i)
end
end
#--------------------------------------------------------------------------
def draw_item(index)
item = @data[index]
case Equip_Menu_Syle
when 0,1,2
x = 4 + index % 2 * (288 + 32)
y = index / 2 * 32
when 3,4
x = 4
y = index * 32
end
case item
when RPG::Weapon
number = $game_party.weapon_number(item.id)
when RPG::Armor
number = $game_party.armor_number(item.id)
end
bitmap = RPG::Cache.icon(item.icon_name)
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
self.contents.font.color = normal_color
self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
self.contents.draw_text(x + 240, y, 16, 32, ':', 1)
self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
end
end
#==============================================================================
# ■ Scene_Equip
#==============================================================================
class Scene_Equip
#--------------------------------------------------------------------------
include N01
#--------------------------------------------------------------------------
def main
@actor = $game_party.actors[@actor_index]
@spriteset = Spriteset_Map.new if Show_Map_Equip_Menu
if Equip_Menu_Back != nil
@back_image = Sprite.new
@back_image.bitmap = RPG::Cache.windowskin(Equip_Menu_Back)
end
@help_window = Window_Help.new
@left_window = Window_EquipLeft.new(@actor)
@right_window = Window_EquipRight.new(@actor)
@right_window.index = @equip_index
item_window_update
@right_window.help_window = @help_window
for i in 0...@actor.equip_kind.size
eval("@item_window#{i + 1}.help_window = @help_window")
end
refresh
Graphics.transition
loop do
Graphics.update
Input.update
update
break if $scene != self
end
Graphics.freeze
@help_window.dispose
@back_image.dispose if Equip_Menu_Back != nil
@spriteset.dispose if Show_Map_Equip_Menu
@left_window.dispose
@right_window.dispose
item_window_dispose
end
#--------------------------------------------------------------------------
def refresh
@help_window.opacity = Equip_Window_Opacity
if @right_window.index > @right_window.data.size - 1
@right_window.index = @right_window.data.size - 1
end
for i in 0...@actor.equip_kind.size
eval("@item_window#{i + 1}.visible = (@right_window.index == #{i})")
end
item1 = @right_window.item
eval("@item_window = @item_window#{@right_window.index + 1}")
@left_window.set_new_parameters if @right_window.active
if @item_window.active
@item2 = @item_window.item
last_hp = @actor.hp
last_sp = @actor.sp
@actor.equip(@right_window.index, @item2 == nil ? 0 : @item2.id)
re_equip = []
if @item2 != nil and @item2.type_id == 0 and Two_Hands_Weapons.include?(@item2.id)
for i in 0...@actor.equip_kind.size
id = @actor.equip_kind[i]
if id == 1
re_equip << [i, @actor.equip_id[i]]
@actor.equip(i, 0)
end
end
elsif @item2 != nil and (@item2.type_id == 1 or (@item2.type_id == 0 and
@actor.two_swords_style))
for i in 0...@actor.equip_kind.size
id = @actor.equip_kind[i]
if @right_window.index != i and id == 0 and
Two_Hands_Weapons.include?(@actor.equip_id[id])
re_equip << [i, @actor.equip_id[i]]
@actor.equip(i, 0)
end
end
end
new_atk = @actor.atk
new_pdef = @actor.pdef
new_mdef = @actor.mdef
new_str = @actor.str
new_dex = @actor.dex
new_agi = @actor.agi
new_int = @actor.int
new_eva = @actor.eva
new_hit = @actor.hit
new_crt = @actor.crt
new_dmg = @actor.dmg
new_rcrt = @actor.rcrt
new_rdmg = @actor.rdmg
@actor.equip(@right_window.index, item1 == nil ? 0 : item1.id)
for equip in re_equip
@actor.equip(equip[0], equip[1])
end
@actor.hp = last_hp
@actor.sp = last_sp
@left_window.set_new_parameters(new_atk, new_pdef, new_mdef, new_str, new_dex,
new_agi, new_int, new_eva, new_hit, new_crt, new_dmg, new_rcrt, new_rdmg)
end
end
#--------------------------------------------------------------------------
def item_window_update
for i in 0...@actor.equip_kind.size
type = @actor.equip_kind[i]
eval("@item_window#{i+1} = Window_EquipItem.new(@actor, type)")
end
for i in 0...@actor.equip_kind.size
eval("@item_window#{i + 1}.help_window = @help_window")
end
refresh
end
#--------------------------------------------------------------------------
def item_window_dispose
for i in 0...@actor.equip_kind.size
eval("@item_window#{i+1}.dispose if @item_window#{i+1} != nil")
end
end
#--------------------------------------------------------------------------
def update_item
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@right_window.active = true
@item_window.active = false
@item_window.index = -1
return
end
if Input.trigger?(Input::C)
item = @item_window.item
@actor.equip(@right_window.index, item == nil ? 0 : item.id)
update_hands(item)
@right_window.active = true
@item_window.active = false
@item_window.index = -1
@right_window.refresh
@item_window.refresh
$game_system.se_play($data_system.equip_se)
return
end
end
#--------------------------------------------------------------------------
def update_right
if Input.trigger?(Input::UP) or Input.trigger?(Input::DOWN)
@item_window.index = -1
@item_window.refresh
end
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Menu.new(2)
return
end
if Input.trigger?(Input::C)
if @actor.equip_fix?(@right_window.index) or (@item_window.data.size == 0 and
@actor.lock_equip(@right_window.index))
return $game_system.se_play($data_system.buzzer_se)
end
$game_system.se_play($data_system.decision_se)
@right_window.active = false
@item_window.active = true
@item_window.index = 0
return
end
if Input.trigger?(Input::R)
$game_system.se_play($data_system.cursor_se)
@actor_index += $game_party.actors.size + 1
@actor_index %= $game_party.actors.size
$scene = Scene_Equip.new(@actor_index, @right_window.index)
return
end
if Input.trigger?(Input::L)
$game_system.se_play($data_system.cursor_se)
@actor_index += $game_party.actors.size - 1
@actor_index %= $game_party.actors.size
$scene = Scene_Equip.new(@actor_index, @right_window.index)
return
end
end
#--------------------------------------------------------------------------
def update_hands(item)
if item != nil and item.type_id == 0 and Two_Hands_Weapons.include?(item.id)
for i in 0...@actor.equip_kind.size
id = @actor.equip_kind[i]
@actor.equip(i, 0) if id == 1
end
elsif item != nil and (item.type_id == 1 or (item.type_id == 0 and @actor.two_swords_style))
for i in 0...@actor.equip_kind.size
id = @actor.equip_kind[i]
if @right_window.index != i and id == 0 and
Two_Hands_Weapons.include?(@actor.equip_id[id])
@actor.equip(i, 0)
end
end
end
end
end
#==============================================================================
# ■ Window_ShopStatus
#==============================================================================
class Window_ShopStatus < Window_Base
#--------------------------------------------------------------------------
def refresh
self.contents.clear
if @item == nil
return
end
case @item
when RPG::Item
number = $game_party.item_number(@item.id)
when RPG::Weapon
number = $game_party.weapon_number(@item.id)
when RPG::Armor
number = $game_party.armor_number(@item.id)
end
self.contents.font.color = system_color
self.contents.draw_text(4, 0, 200, 32, 'Você tem')
self.contents.font.color = normal_color
self.contents.draw_text(204, 0, 32, 32, number.to_s, 2)
if @item.is_a?(RPG::Item)
return
end
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
if actor.equippable?(@item)
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
self.contents.draw_text(4, 64 + 64 * i, 120, 32, actor.name)
for n in 0...actor.equip_kind.size
id = actor.equip_kind[n]
if @item.is_a?(RPG::Weapon)
item1 = $data_weapons[actor.equip_id[n]] if id == 0
else
if $data_armors[actor.equip_id[n]].type == @item.type_id and not
(@item.type_id == 1 and actor.two_swords_style)
item1 = $data_armors[actor.equip_id[n]]
end
end
end
if actor.equippable?(@item)
change = 0
if @item.is_a?(RPG::Weapon)
atk1 = item1 != nil ? item1.atk : 0
atk2 = @item != nil ? @item.atk : 0
change = atk2 - atk1
elsif @item.is_a?(RPG::Armor) && @item.kind <= 2
pdef1 = item1 != nil ? item1.pdef : 0
mdef1 = item1 != nil ? item1.mdef : 0
pdef2 = @item != nil ? @item.pdef : 0
mdef2 = @item != nil ? @item.mdef : 0
change = pdef2 - pdef1 + mdef2 - mdef1
elsif @item.is_a?(RPG::Armor) && @item.kind > 2
change = 0
item1 = nil
end
if change > 0 and actor.equippable?(@item)
self.contents.font.color = text_color(3)
elsif change < 0 and actor.equippable?(@item)
self.contents.font.color = text_color(2)
end
self.contents.draw_text(64, 64 + 64 * i, 128, 32,sprintf('%+d', change), 2)
self.contents.font.color = normal_color
end
if item1 != nil
x = 4
y = 64 + 64 * i + 32
bitmap = RPG::Cache.icon(item1.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x + 28, y, 212, 32, item1.name)
end
end
end
#--------------------------------------------------------------------------
def item=(item)
if @item != item
@item = item
refresh
end
end
end
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
alias aas_turn_ending_n01 turn_ending
def turn_ending
for member in $game_party.actors + $game_troop.enemies
member.second_attack = false
end
aas_turn_ending_n01
end
#--------------------------------------------------------------------------
alias aas_action_end_n01 action_end
def action_end
aas_action_end_n01
for member in $game_party.actors + $game_troop.enemies
member.second_attack = false
end
end
end