themarie 0 Report post Posted October 27, 2011 (edited) Hello all , :biggrin_002: Well I have the sied view battle system But I want to custom things like : -The place of the skill menu , ( when you started the battle you choose fight , you have the command window ," fight skill ..." and for example when you choose skill the skill menu appears in the bottom , I read the scripts and I didn't find how to change it and like I said Im not good on scripting that's why I need help ^^ ( for the Item menu also ) Screens : ( example of the Item menu and it's the same thing as the skill menu ) I just wanted to know if it's possible to do that ^^ Thank you :) Edited October 27, 2011 by themarie Share this post Link to post Share on other sites
Kiriashi 117 Report post Posted October 27, 2011 Whenever you ask a question regarding a script, you need to post that script. Make sure you put it in spoiler and code tags, too -- like this: class script [indent]def initialize [indent]print "your script"[/indent] end[/indent]end [color=#000000][/spo[/color]iler[color=#000000]][/c[/color]ode] Share this post Link to post Share on other sites
Bigace360 38 Report post Posted October 27, 2011 Can re write your question, sorry I'm just having a hard time understanding what u want. Then I can help as I might know what you're asking for just need clarification. Share this post Link to post Share on other sites
kellessdee 48 Report post Posted October 27, 2011 I can almost guarantee you, that there is a VERY easy fix for this...however we have NO idea what script you are using so we have no idea what needs to be edited... Share this post Link to post Share on other sites
themarie 0 Report post Posted October 27, 2011 (edited) Well on the screen it's the Item window , I just wanted to know If I can move it ,cuz I didn't find how to move it on my scripts Core scripts : #============================================================================== # 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 Edited October 27, 2011 by Kiriashi Share this post Link to post Share on other sites
themarie 0 Report post Posted October 27, 2011 (edited) I searched But I just find how to move the command window and change colors , position of the battlers faces ect ..But I didn't find how to move the Item menu and the skills menu I want to move them cuz they are at the bottom ( sorry the spoiler didn't work :mellow: ) Edited October 27, 2011 by themarie Share this post Link to post Share on other sites
Bigace360 38 Report post Posted October 27, 2011 Actually the class Window_Item is under Sideview 2. and there you can change where you want the item window to go. It starts at line 3047. and the skill window starts at 3008. To move windows around just go to the line on both windows that say: super(x, y, width, height) and just change the x and y coordinates around, and to change the size of the window change change the width and the height. Hopefully this is what your asking, as I'm still confused on the question. Share this post Link to post Share on other sites
Bigace360 38 Report post Posted October 27, 2011 Actually the class Window_Item is under Sideview 2. and there you can change where you want the item window to go. It starts at line 3047. and the skill window starts at 3008. To move windows around just go to the line on both windows that say: super(x, y, width, height) and just change the x and y coordinates around, and to change the size of the window change change the width and the height. Hopefully this is what your asking, as I'm still confused on the question. Share this post Link to post Share on other sites
themarie 0 Report post Posted October 27, 2011 awesome :biggrin_002: ! Yeah this is what i was asking about thanks a lot :alright: Share this post Link to post Share on other sites