Tenoukii 0 Report post Posted April 10, 2011 Helloo (: I've just stumbled up ParaDog's ATB (Active Time Battle) and I really like it. But is there a way to modify it so that only the Enemy battler is visable. Like this: I had a random thought that it could be as easy as removing the side view battle script, but I haven't tried it in case it messes something up (: Link to the script: http://www.houseslasher.com/m/index.php/t64.html Thankks! Share this post Link to post Share on other sites
kellessdee 48 Report post Posted April 10, 2011 Your best bet is to actually just set each actor's battler to a blank image file. or do you not want battle animations/damage amounts to appear either? Share this post Link to post Share on other sites
Tenoukii 0 Report post Posted April 11, 2011 yeah... i don't want animations/damage amounts. I tried setting it to no battler and that didn't work. The original script has a side-view addon which i didnt want (so havent used) and that changes it so it uses battler graphics, if that makes any sence "/ lol Share this post Link to post Share on other sites
kellessdee 48 Report post Posted April 11, 2011 (edited) Oh okay, well then the script would need to be edited to completely remove battlers and the animations invoked on the battlers. Would you like me to do this for you? EDIT: are you going to display damage somehow? Or just leave it so you don't see damage? Edited April 11, 2011 by kellessdee Share this post Link to post Share on other sites
Tenoukii 0 Report post Posted April 11, 2011 That would be amazingly helpful if you could ^_^ and I would like to see the damage, but I can't see a way of it being done (unless theres some super special scripting technique that i'm clueless about... mind you, i'm clueless about all scripting "/) lol. Thanks! Share this post Link to post Share on other sites
kellessdee 48 Report post Posted April 11, 2011 Actually, it would probably be easier (well less scripting in a sense) to just show damage and not show battle animations. So I will just modify the scripts and post them here :) Share this post Link to post Share on other sites
Tenoukii 0 Report post Posted April 11, 2011 Ahh okay.. lol. This place makes my life so much easier :P Muchos Gracias Muchachas Share this post Link to post Share on other sites
kellessdee 48 Report post Posted April 11, 2011 (edited) Hey no problem it's a simple edit :) Also, can you send me the scripts without the side-view battle? It would make editing worlds easier. EDIT: Nvm, I just realized if I remove the side-view script it works properly haha XD Also, does it matter to you where the damage is displayed for each character? Or is there somewhere specific? Edited April 11, 2011 by kellessdee Share this post Link to post Share on other sites
Tenoukii 0 Report post Posted April 11, 2011 Erm... it doesn't really matter as long as its not somewhere wildly stupid and you can see which player's affected, so prehaps try and fit it in next to/above their name/hp meter? if not then just anywhere where it makes sense (: Share this post Link to post Share on other sites
kellessdee 48 Report post Posted April 11, 2011 (edited) Okay fixed her up Insert this above the main as a new script: class Sprite_Battler < RPG::Sprite #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update super # If battler is nil if @battler == nil self.bitmap = nil loop_animation(nil) return end unless @battler.is_a?(Game_Actor) # If file name or hue are different than current ones if @battler.battler_name != @battler_name || @battler.battler_hue != @battler_hue # Get and set bitmap @battler_name = @battler.battler_name @battler_hue = @battler.battler_hue self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue) @width = bitmap.width @height = bitmap.height self.ox = @width / 2 self.oy = @height # Change opacity level to 0 when dead or hidden if @battler.dead? || @battler.hidden self.opacity = 0 end end end # If animation ID is different than current one if @battler.damage == nil && @battler.state_animation_id != @state_animation_id @state_animation_id = @battler.state_animation_id loop_animation($data_animations[@state_animation_id]) end # Blink if @battler.blink blink_on else blink_off end # If invisible unless @battler_visible # Appear if !@battler.hidden && !@battler.dead? && (@battler.damage == nil || @battler.damage_pop) appear @battler_visible = true end end # If visible if @battler_visible # Escape if @battler.hidden $game_system.se_play($data_system.escape_se) escape @battler_visible = false end # White flash if @battler.white_flash whiten @battler.white_flash = false end # Animation if @battler.animation_id != 0 && @battler.is_a?(Game_Enemy) animation = $data_animations[@battler.animation_id] animation(animation, @battler.animation_hit) @battler.animation_id = 0 end # Damage if @battler.damage_pop damage(@battler.damage, @battler.critical) @battler.damage = nil @battler.critical = false @battler.damage_pop = false end # Collapse if @battler.damage == nil && @battler.dead? if @battler.is_a?(Game_Enemy) $game_system.se_play($data_system.enemy_collapse_se) else $game_system.se_play($data_system.actor_collapse_se) end collapse @battler_visible = false end end # Set sprite coordinates self.x = @battler.screen_x self.y = @battler.screen_y self.z = @battler.screen_z end end class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # * Get Battle Screen X-Coordinate #-------------------------------------------------------------------------- def screen_x return 340 end #-------------------------------------------------------------------------- # * Get Battle Screen Y-Coordinate #-------------------------------------------------------------------------- def screen_y if self.index != nil return self.index * 32 + 320 else return 0 end end end #============================================================================== # ** Spriteset_Battle #------------------------------------------------------------------------------ # This class brings together battle screen sprites. It's used within # the Scene_Battle class. #============================================================================== class Spriteset_Battle #-------------------------------------------------------------------------- # * Public Instance Variables #-------------------------------------------------------------------------- attr_reader :viewport1 # enemy viewport attr_reader :viewport2 # actor viewport #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize # Make viewports @viewport1 = Viewport.new(0, 0, 640, 320) @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 # Make battleback sprite @battleback_sprite = Sprite.new(@viewport1) # Make enemy sprites @enemy_sprites = [] for enemy in $game_troop.enemies.reverse @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy)) end # Make actor sprites @actor_sprites = [] @actor_sprites.push(Sprite_Battler.new(@viewport4)) @actor_sprites.push(Sprite_Battler.new(@viewport4)) @actor_sprites.push(Sprite_Battler.new(@viewport4)) @actor_sprites.push(Sprite_Battler.new(@viewport4)) # Make weather @weather = RPG::Weather.new(@viewport1) # Make picture sprites @picture_sprites = [] for i in 51..100 @picture_sprites.push(Sprite_Picture.new(@viewport3, $game_screen.pictures[i])) end # Make timer sprite @timer_sprite = Sprite_Timer.new # Frame update update end end What I did here, was overwrote the Sprite_Battler Update method (which handles displaying the actual actor sprite) to not create a bitmap (which holds the actual graphic), and I made it so that it doesn't display animations unless it is an enemy. I changed the screen_x, screen_y of the game_actor class to position the sprites by their corresponding hps. This way damage is displayed near the hp rather than behind it. I also had to overwrite the spriteset_battle initialize method (which handles bringing all the sprites together in battle) to place the player's sprites in a viewport (think of it like a "layer" in rpgmaker, they are actually used in displaying the map to make it possible make certain sprites above or below each other) I had to do this in order for the damage to display ABOVE the hp bar, rather than behind it. Finally, replace your ParaDog's ATB V 2.6.1 (Completely erase and replace with this) #============================================================================== # Active Time Battle v.2.62 # Script by ParaDog # http://2d6.parasite.jp/ #------------------------------------------------------------------------------ # When the CT Gauge becomes filled, the battler which it controls will then be # able to perform his/her battle action. # The system can also adjust the positioning of the BattleStatus window which # works well with Sideview System scripts. #------------------------------------------------------------------------------ # INSTALLING: # When using this system, it is recommended that this script be placed above # all other 'Custom' scripts... directly below Scene_Debug if possible. #------------------------------------------------------------------------------ # ESCAPE: # While a battler's command window is active, pressing the [ESC] button will # activate the 'Fight / Escape' window at the top of the screen. The more # actors you have with full CT, the better your chances are of a successful # escape, while fewer actors and more enemies results in a lower chance to flee. # # NEXT/PREVIOUS BATTLER: # When two or more actors can act, you can toggle between the actors with full # CT gauges with the [R] button or the [PageDown] key, or in reverse order with # the [L] button or the [PageUp] key. These keys can be altered in the config- # uration section below. #============================================================================== # Modified by Kellessdee to display cursor rect over selected character # and fixed the switching between character's bug module PARA_CTB # CT gauge pauses while command window is open COMMAND_WAIT = false # CT gauge pauses when Skill and Item windows are open, and while targeting SELECT_WAIT = true # CT gauge pauses when battlers perform actions ANIMATION_WAIT = false # CT Gauge fill / Battle system speed BATTLE_SPEED = 3 # Maximum size in your Battle Party PARTY_SIZE = 4 # CT Cost in percentages for each action ACT_ATTACK_CT = 100 # Normal attack ACT_GUARD_CT = 100 # Defense ACT_ESCAPE_CT = 100 # Escape ACT_SKILL_CT = 100 # Skill ACT_ITEM_CT = 100 # Item # Message when failed to escape UNESCAPE_MES = "Escape failed" # Sound effect played when the CT Gauge is full (if "", plays no sound) # Sound effect stored in the project's "Audio/SE" folder FULL_CT_SE = "015-Jump01" # Sound Volume FULL_CT_SE_VOL = 80 # Tone effect of the battler when the CT Gauge is full # A value of (0,0,0) performs no tone change FULL_CT_COLOR = Tone.new(32,0,0) # Color of HP gauge (gradation left edge) HP_COLOR_LEFT = Color.new(128, 0, 0, 255) # Color of HP gauge (gradation right edge) HP_COLOR_RIGHT= Color.new(255, 0, 0, 255) # Color of SP gauge (gradation left edge) SP_COLOR_LEFT = Color.new(0, 0, 128, 255) # Color of SP gauge (gradation right edge) SP_COLOR_RIGHT= Color.new(0, 0, 255, 255) # Color of CT gauge (gradation left edge) COLOR_LEFT = Color.new(128, 128, 64, 255) # Color of CT gauge (gradation left edge) COLOR_RIGHT= Color.new(255, 255, 128, 255) # Color of CT gauge (filled gauge) COLOR_FULL = Color.new(255, 225, 128, 255) # Gauge Frame Color FRAME_COLOR = Color.new(192, 192, 192, 255) # Gauge Frame Width FRAME_BORDER = 1 # Gauge Frame Background Color BACK_COLOR = Color.new(128, 128, 128, 128) # Font Size of Actor Names NAME_FONT_SIZE = 16 # Font Size of Actor HP/SP HPSP_FONT_SIZE = 18 # Font Size of Enemy Names ENEMY_FONT_SIZE = 16 # Draw maximum values for HP/SP MAX_DRAW = false # Group Enemy Names # Ex: Instead of "Ghost Ghost" it will say "Ghost2" ENEMY_GROUPING = false # Draw Bars for Enemies (0: None / 1: HP / 2: CT) # If ENEMY_GROUPING is used, then this setting is ignored ENEMY_DRAWING_MATER = 2 # Draw Actor HP/SP bars in the help window HELP_DRAWING_MATER_ACTOR = false # Draw Enemy HP/SP bars in the help window HELP_DRAWING_MATER_ENEMY = false # Command Window Position System (true/false) # (Useful with side-view scripts if the position of the Actor Command Window # appears unnatural). The default setting is false, while true allows you to # adjust the x/y position of the window. WINDOWPOS_CHANGE = false WINDOWPOS_X = 100 # X coordinates of the Actor Command Window WINDOWPOS_Y = 320 # Y coordinates of the Actor Command Window # Sets the intervals of the CT bar updates # The lower a setting, the smoother the CT Bar fill will appear (0 Minimum). # The higher a setting, the faster the CT Bar refreshes (Useful if lagging). CT_SKIP = 2 # Set the Action Order Keys (Declared Method,Input::(Button)) # (See matching keys listed in RPGMaker XP) CHANGE_NEXT = Input::R # Skip to next actor CHANGE_LAST = Input::L # Skip back to previous actor # Opacity of the Actor Command Window WINDOW_OPACITY = 160 # Opacity of the Battlestatus Window WINDOW_MAIN_OPACITY = 255 # Revised Escape Ratio # The higher the number, the easier to escape (1 being minimum). The base # value is calculated by dividing the total of active party members by the # number of active enemies. This value, multiplied by 10, determines the # ercentage chance to escape. If the calculated value is -1, it succeeds. ESCAPEABLE = 10 end # End of the config section #------------------------------------------------------------------------------ #============================================================================== # ** Scene_Battle #------------------------------------------------------------------------------ # This class performs battle screen processing. #============================================================================== class Scene_Battle #-------------------------------------------------------------------------- # * CT Update #-------------------------------------------------------------------------- def update_ct # When count rise is permitted if @countup for actor in $game_party.actors # If you can act? if actor.movable? == false and actor.ct_visible and @phase4_step != 5 # In invisibility state count rise actor.ct_visible = false actor.countup = true actor.full_ct = false elsif actor.movable? and actor.ct_visible == false # Cancelling invisibility count rise clear_ct(actor) actor.ct_visible = true end # It corresponds to the replacement of the actor if actor.max_ct == 0 actor.max_ct = @max_ct end # Count rise of actor if actor.countup # If the CT Gauge is filled and the actor is not in action if actor.now_ct >= @max_ct and !(@pre_action_battlers.include?(actor)) # Adds the actor to the command input list @pre_action_battlers.push(actor) @action_count += 1 # Play the CG Gauge SE if PARA_CTB::FULL_CT_SE != "" and actor.ct_visible Audio.se_play("Audio/SE/" + PARA_CTB::FULL_CT_SE,PARA_CTB::FULL_CT_SE_VOL) end # Stop filling the CT Gauge actor.countup = false actor.full_ct = true else # Count rise actor.make_action_speed ct_skip = PARA_CTB::CT_SKIP + 1 actor.now_ct += actor.current_action.speed * PARA_CTB::BATTLE_SPEED * ct_skip end end end for enemy in $game_troop.enemies # If you can act if enemy.movable? == false and enemy.ct_visible and @phase4_step == 5 # In invisibility state count rise enemy.ct_visible = false enemy.countup = true enemy.full_ct = false elsif enemy.movable? and enemy.ct_visible == false # Clear the invisible CT clear_ct(enemy) enemy.ct_visible = true end # Count rise of enemy if enemy.countup # if the enemy CT Gauge is full and the enemy is not in action if enemy.now_ct >= @max_ct and ! @pre_action_battlers.include?(enemy) # Adds the enemy to the command input list @pre_action_battlers.push(enemy) @action_count += 1 # Stop filling the CT Gauge enemy.countup = false enemy.full_ct = true else # Count rise enemy.make_action_speed enemy.now_ct += enemy.current_action.speed * PARA_CTB::BATTLE_SPEED end end end # Redrawing CT gauge @status_window.refresh_ct @status_window2.refresh_ct end end #-------------------------------------------------------------------------- # * Clear the battler CT #-------------------------------------------------------------------------- def clear_ct(battler) battler.countup = true battler.now_ct = 0 battler.full_ct = false end #-------------------------------------------------------------------------- # * Percentage of battler CT #-------------------------------------------------------------------------- def declease_ct(battler,percent) battler.countup = true battler.now_ct = battler.now_ct * percent / 100 battler.full_ct = false end #-------------------------------------------------------------------------- # * CT Initialization #-------------------------------------------------------------------------- def initialize_ct # Deciding the reference level of CT max_ct for battler in $game_party.actors + $game_troop.enemies if battler.movable? # Set the CT starting level battler.now_ct = battler.agi * 300 battler.ct_visible = true else clear_ct(battler) battler.ct_visible = false end battler.countup = true battler.full_ct = false battler.max_ct = @max_ct end end #-------------------------------------------------------------------------- # * Set the reference level of empty CT based on the Battler's speed #-------------------------------------------------------------------------- def max_ct for battler in $game_party.actors + $game_troop.enemies @max_ct += battler.agi end @max_ct = @max_ct * 500 / ($game_party.actors.size + $game_troop.enemies.size ) end #-------------------------------------------------------------------------- # * Modify the Battler's order of performance #-------------------------------------------------------------------------- def shift_activer(shift) # When one shifting, the actor of rear 2 or more if @pre_action_battlers != nil if shift == 1 # Acquiring the present actor act = @pre_action_battlers[@pre_action_battlers.size-1] # Inserting the present actor in two rear @pre_action_battlers.insert(0, act) # Presently eliminating position @pre_action_battlers.delete_at(@pre_action_battlers.size-1) @actor_array_index -= 1 phase3_next_actor else act = @pre_action_battlers[@actor_array_index] # Most adding the present actor to rear @pre_action_battlers.push(act) # Presently eliminating position @pre_action_battlers.delete_at(@actor_array_index) @actor_array_index -= 1 phase3_next_actor end end end #-------------------------------------------------------------------------- # * Main processing #-------------------------------------------------------------------------- alias main_ctb main def main # Drawing up the enemy name window @status_window2 = Window_BattleStatus_enemy.new @action_battlers = [] @pre_action_battlers = [] @max_ct = 0 @countup = false @ct_wait = 0 @action_count = 0 main_ctb # Dispose the enemy name window @status_window2.dispose end #-------------------------------------------------------------------------- # * Frame renewal #-------------------------------------------------------------------------- alias ctb_update update def update # If battle event is running if $game_system.battle_interpreter.running? # Update interpreter $game_system.battle_interpreter.update # If a battler which is forcing actions doesn't exist if $game_temp.forcing_battler == nil # If battle event has finished running unless $game_system.battle_interpreter.running? # Rerun battle event set up if battle continues unless judge setup_battle_event end end # If not after battle phase if @phase != 5 # Refresh status window @status_window.refresh # Refresh enemy status window @status_window2.refresh end end else if @ct_wait > 0 @ct_wait -= 1 else update_ct @ct_wait = PARA_CTB::CT_SKIP end end unless @actor_index == nil if @actor_index >= 0 && @active_battler != nil # Display cursor rect x = 0 y = @actor_index * 32 @status_window.cursor_rect.set(x, y, @status_window.contents.width, 32) else @status_window.cursor_rect.empty end end ctb_update end #-------------------------------------------------------------------------- # * Start Pre-Battle Phase #-------------------------------------------------------------------------- alias ctb_start_phase1 start_phase1 def start_phase1 # CT Initialization initialize_ct # Start of Count Rise @countup = true # Run original call ctb_start_phase1 end #-------------------------------------------------------------------------- # * Frame Update (pre-battle phase) #-------------------------------------------------------------------------- def update_phase1 # Renew the enemy name list @status_window2.refresh # Determine win/loss situation if judge # If won or lost: end method return end # Start actor command phase start_phase3 end #-------------------------------------------------------------------------- # * Start Party Command Phase #-------------------------------------------------------------------------- def start_phase2 # Shift to phase 2 @phase = 2 # Set actor to non-selecting @actor_index = -1 @active_battler = nil # Enable party command window @party_command_window.active = true @party_command_window.visible = true # Disable actor command window @actor_command_window.active = false @actor_command_window.visible = false # Clear main phase flag $game_temp.battle_main_phase = false # If impossible to input command unless $game_party.inputable? # Start main phase start_phase4 end end #-------------------------------------------------------------------------- # * Frame Update (party command phase: escape) #-------------------------------------------------------------------------- def update_phase2_escape # Calculate enemy agility average enemies_agi = 0 for enemy in $game_troop.enemies if enemy.exist? enemies_agi += enemy.agi end end # Calculate actor agility average actors_agi = 0 for actor in @pre_action_battlers if actor.is_a?(Game_Actor) and actor.exist? actors_agi += actor.agi end end # Determine if escape is successful if PARA_CTB::ESCAPEABLE < 0 success = true else success = rand(100) < PARA_CTB::ESCAPEABLE * 10 * actors_agi / enemies_agi end # If escape is successful if success # Play escape SE $game_system.se_play($data_system.escape_se) # Return to BGM before battle started $game_system.bgm_play($game_temp.map_bgm) # Clear the Battlers' CT for battler in $game_party.actors clear_ct(battler) end # Battle ends battle_end(1) # If escape is failure else # Set the "Escape Failure" message to the help window @help_window.set_text(PARA_CTB::UNESCAPE_MES, 1) # Clearing action and CT of the actor pre_action_battlers = @pre_action_battlers.clone for act in pre_action_battlers if act.is_a?(Game_Actor) declease_ct(act, 100-PARA_CTB::ACT_ESCAPE_CT) act.current_action.clear @pre_action_battlers.delete(act) end end @party_command_window.visible = false # Hide the help window @help_window.visible = true @wait_count = 20 # Start main phase start_phase4 end end #-------------------------------------------------------------------------- # * Start Actor Command Phase #-------------------------------------------------------------------------- def start_phase3 # Shift to phase 3 @phase = 3 # Set actor as unselectable @actor_index = -1 @active_battler = nil @actor_array_index = -1 # To command input of the following actor if @pre_action_battlers != [] phase3_next_actor else start_phase4 end end #-------------------------------------------------------------------------- # * Go to Command Input for Next Actor #-------------------------------------------------------------------------- def phase3_next_actor # Loop begin # Actor blink effect OFF if @active_battler != nil @active_battler.blink = false end # If last actor if @actor_array_index + 1 == @pre_action_battlers.size # Start main phase start_phase4 return # The next in case of enemy elsif $game_troop.enemies.include?(@pre_action_battlers[@actor_array_index + 1]) # Start main phase start_phase4 return end # Advance actor index @actor_array_index += 1 @actor_index = @pre_action_battlers[@actor_array_index].index @active_battler = $game_party.actors[@actor_index] # When the battle event is reserved, if @active_battler.current_action.forcing # Main phase start start_phase4 return end @active_battler.blink = true @active_battler.current_action.clear # Once more if actor refuses command input end until @active_battler.inputable? # Set up actor command window phase3_setup_command_window end #-------------------------------------------------------------------------- # * Go to Command Input of Previous Actor #-------------------------------------------------------------------------- def phase3_prior_actor # Loop begin # Actor blink effect OFF if @active_battler != nil @active_battler.blink = false end # If first actor if @actor_array_index <= 0 # Start party command phase start_phase2 return end # Return to actor index @actor_array_index -= 1 @actor_index = @pre_action_battlers[@actor_array_index].index @active_battler = $game_party.actors[@actor_index] @active_battler.blink = true @active_battler.current_action.clear # Once more if actor refuses command input end until @active_battler.inputable? # Set up actor command window phase3_setup_command_window end #-------------------------------------------------------------------------- # * Actor Command Window Setup #-------------------------------------------------------------------------- alias phase3_setup_command_window_ctb phase3_setup_command_window def phase3_setup_command_window @actor_command_window.back_opacity = PARA_CTB::WINDOW_OPACITY phase3_setup_command_window_ctb if PARA_CTB::WINDOWPOS_CHANGE # Set actor command window position @actor_command_window.x = PARA_CTB::WINDOWPOS_X @actor_command_window.y = PARA_CTB::WINDOWPOS_Y # Way it does not hide in the status window @actor_command_window.z = 9999 end end #-------------------------------------------------------------------------- # * Frame Update (actor command phase) #-------------------------------------------------------------------------- def update_phase3 # If enemy arrow is enabled if @enemy_arrow != nil @countup = PARA_CTB::SELECT_WAIT ? false : true update_phase3_enemy_select # If actor arrow is enabled elsif @actor_arrow != nil @countup = PARA_CTB::SELECT_WAIT ? false : true update_phase3_actor_select # If skill window is enabled elsif @skill_window != nil @countup = PARA_CTB::SELECT_WAIT ? false : true update_phase3_skill_select # If item window is enabled elsif @item_window != nil @countup = PARA_CTB::SELECT_WAIT ? false : true update_phase3_item_select # If actor command window is enabled elsif @actor_command_window.active @countup = PARA_CTB::COMMAND_WAIT ? false : true update_phase3_basic_command end end #-------------------------------------------------------------------------- # * Frame Update (actor command phase : basic command) #-------------------------------------------------------------------------- alias ctb_update_phase3_basic_command update_phase3_basic_command def update_phase3_basic_command ctb_update_phase3_basic_command # Change player order with the preset L & R keys if Input.trigger?(PARA_CTB::CHANGE_NEXT) shift_activer(1) end if Input.trigger?(PARA_CTB::CHANGE_LAST) shift_activer(-1) end end #-------------------------------------------------------------------------- # * Start Main Phase #-------------------------------------------------------------------------- def start_phase4 # Shift to phase 4 @phase = 4 battler_count = $game_party.actors.size + $game_troop.enemies.size if @action_count >= battler_count or $game_temp.battle_turn == 0 # Search all battle event pages for index in 0...$data_troops[@troop_id].pages.size # Get event page page = $data_troops[@troop_id].pages[index] # If this page span is [turn] if page.span == 1 # Clear action completed flags $game_temp.battle_event_flags[index] = false end end # Turn count $game_temp.battle_turn += 1 @action_count = 0 end # Set actor as unselectable @actor_index = -1 @active_battler = nil # Enable party command window @party_command_window.active = false @party_command_window.visible = false # Disable actor command window @actor_command_window.active = false @actor_command_window.visible = false # Set main phase flag $game_temp.battle_main_phase = true # Make enemy action for enemy in $game_troop.enemies unless enemy.current_action.forcing enemy.make_action end end # Make action orders make_action_orders # Shift to step 1 @phase4_step = 1 end #-------------------------------------------------------------------------- # * Make Action Orders #-------------------------------------------------------------------------- def make_action_orders # Initialize @action_battlers array @action_battlers = [] if @pre_action_battlers != [] for i in 0..@actor_array_index # Add the actors to the @action_battle array @action_battlers.push(@pre_action_battlers[0]) @pre_action_battlers.shift end if @pre_action_battlers.size != 0 loop do if $game_troop.enemies.include?(@pre_action_battlers[0]) # Add the enemies to the @action_battle array @action_battlers.push(@pre_action_battlers[0]) @pre_action_battlers.shift else break end end end end end #-------------------------------------------------------------------------- # * Frame Update (main phase step 1 : action preparation) #-------------------------------------------------------------------------- alias ctb_update_phase4_step1 update_phase4_step1 def update_phase4_step1 @countup = true # Hide the help window @help_window.visible = false # Determine win/loss situation if judge # If won or lost: end method return end # If no actionless battlers exist (all have performed an action) if @action_battlers.size == 0 # Start actor command phase start_phase3 return end ctb_update_phase4_step1 end #-------------------------------------------------------------------------- # * Frame Update (main phase step 2 : start action) #-------------------------------------------------------------------------- alias ctb_update_phase4_step2 update_phase4_step2 def update_phase4_step2 # If not a forcing action unless @active_battler.current_action.forcing # If restriction is [cannot perform action] if @active_battler.restriction == 4 # Clear the CT clear_ct(@active_battler) # Clear battler being forced into action $game_temp.forcing_battler = nil # Shift to step 1 @phase4_step = 1 return end end # Determines if CT Gauge is filled during animation @countup = PARA_CTB::ANIMATION_WAIT ? false : true ctb_update_phase4_step2 end #-------------------------------------------------------------------------- # * Make Basic Action Results #-------------------------------------------------------------------------- alias make_basic_action_result_ctb make_basic_action_result def make_basic_action_result # If doing nothing if @active_battler.current_action.basic == 3 # Clear the battler's CT clear_ct(@active_battler) # Clear battler being forced into action $game_temp.forcing_battler = nil # Shift to step 1 @phase4_step = 1 return end make_basic_action_result_ctb end #-------------------------------------------------------------------------- # * Make Skill Action Results #-------------------------------------------------------------------------- def make_skill_action_result # Get skill @skill = $data_skills[@active_battler.current_action.skill_id] # If not a forcing action unless @active_battler.current_action.forcing # If unable to use due to SP running out unless @active_battler.skill_can_use?(@skill.id) # Clear battler being forced into action $game_temp.forcing_battler = nil # Clear the CT declease_ct(@active_battler,100-PARA_CTB::ACT_SKILL_CT) # Shift to step 1 @phase4_step = 1 return end end # Use up SP @active_battler.sp -= @skill.sp_cost # Refresh status window @status_window.refresh # Show skill name on help window @help_window.set_text(@skill.name, 1) # Set animation ID @animation1_id = @skill.animation1_id @animation2_id = @skill.animation2_id # Set command event ID @common_event_id = @skill.common_event_id # Set target battlers set_target_battlers(@skill.scope) # Apply skill effect for target in @target_battlers target.skill_effect(@active_battler, @skill) end end #-------------------------------------------------------------------------- # * Make Item Action Results #-------------------------------------------------------------------------- alias ctb_make_item_action_result make_item_action_result def make_item_action_result # Get item @item = $data_items[@active_battler.current_action.item_id] # If unable to use due to items running out unless $game_party.item_can_use?(@item.id) # Clear the CT declease_ct(@active_battler,100-PARA_CTB::ACT_ITEM_CT) # Shift to step 1 @phase4_step = 1 return end ctb_make_item_action_result end #-------------------------------------------------------------------------- # * Frame Update (main phase step 5 : damage display) #-------------------------------------------------------------------------- alias update_phase4_step5_ctb update_phase4_step5 def update_phase4_step5 # Display damage for target in @target_battlers if target.damage != nil target.movable_backup = target.movable? end end update_phase4_step5_ctb end #-------------------------------------------------------------------------- # * Frame Update (main phase step 6 : refresh) #-------------------------------------------------------------------------- alias update_phase4_step6_ctb update_phase4_step6 def update_phase4_step6 @active_battler.countup = true if @active_battler.current_action.basic == 1 # Defense declease_ct(@active_battler,100-PARA_CTB::ACT_GUARD_CT) else case @active_battler.current_action.kind # Attack when 0 declease_ct(@active_battler,100-PARA_CTB::ACT_ATTACK_CT) # Skill when 1 declease_ct(@active_battler,100-PARA_CTB::ACT_SKILL_CT) # Item when 2 declease_ct(@active_battler,100-PARA_CTB::ACT_ITEM_CT) else clear_ct(@active_battler) end end # Clear the CT if the battler is incapacitated for target in @target_battlers if target.movable? == false and target.movable_backup == true clear_ct(target) @status_window.refresh_ct end end update_phase4_step6_ctb # Renew the Enemy Name List @status_window2.refresh # Clearing action if @active_battler.guarding? == false @active_battler.current_action.clear end end #-------------------------------------------------------------------------- # * Start After Battle Phase #-------------------------------------------------------------------------- alias ctb_start_phase5 start_phase5 def start_phase5 @countup = false ctb_start_phase5 end end #============================================================================== # ** Window_BattleStatus #------------------------------------------------------------------------------ # This window displays the status of all party members on the battle screen. #============================================================================== class Window_BattleStatus < Window_Base #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize super(160, 320, 480, 160) self.contents = Bitmap.new(width - 32, height - 32) self.back_opacity = PARA_CTB::WINDOW_MAIN_OPACITY @level_up_flags = [false, false, false, false] @before_hp = [] @before_sp = [] @before_states = [] @now_hp = [] @now_sp = [] @now_states = [] refresh end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh @item_max = $game_party.actors.size for i in 0...$game_party.actors.size actor = $game_party.actors[i] line_height = 120 / PARA_CTB::PARTY_SIZE actor_y = i * line_height + 4 # Present status in arrangement @now_hp[i] = actor.hp @now_sp[i] = actor.sp @now_states[i] = actor.states # If leveling up if @level_up_flags[i] self.contents.fill_rect(344, actor_y+14, 100, 8, Color.new(0, 0, 0, 0)) self.contents.font.color = normal_color self.contents.draw_text(344, actor_y, 120, 32, "LEVEL UP!") end end # Light weight conversion processing of battle status # When arrangement of status changes only, drawing processing if @before_hp == nil or @before_sp == nil or @before_states == nil or @before_hp != @now_hp or @before_sp != @now_sp or @before_states != @now_states self.contents.clear for j in 0...$game_party.actors.size actor = $game_party.actors[j] line_height = 120 / PARA_CTB::PARTY_SIZE actor_y = j * line_height + 4 self.contents.font.size = PARA_CTB::NAME_FONT_SIZE # Draw Actor Name draw_actor_name(actor, 4, actor_y+16-PARA_CTB::NAME_FONT_SIZE) # Draw HP hp_color1 = PARA_CTB::HP_COLOR_LEFT hp_color2 = PARA_CTB::HP_COLOR_RIGHT draw_meter(actor.hp, actor.maxhp, 125, actor_y+14, 80, 8, hp_color1, hp_color2) draw_actor_hp(actor, 102, actor_y+16-PARA_CTB::HPSP_FONT_SIZE, 100) # Draw SP sp_color1 = PARA_CTB::SP_COLOR_LEFT sp_color2 = PARA_CTB::SP_COLOR_RIGHT draw_meter(actor.sp, actor.maxsp, 245, actor_y+14, 80, 8, sp_color1, sp_color2) draw_actor_sp(actor, 222, actor_y+16-PARA_CTB::HPSP_FONT_SIZE, 100) # Status after the changing in arrangement @before_hp[j] = actor.hp @before_sp[j] = actor.sp @before_states[j] = actor.states # If Leveling up if @level_up_flags[j] self.contents.fill_rect(344, actor_y, 100, 8, Color.new(0, 0, 0, 0)) self.contents.font.color = normal_color self.contents.draw_text(344, actor_y, 120, 32, "LEVEL UP!") end end end refresh_ct end #-------------------------------------------------------------------------- # * Refresh the CT Gauge #-------------------------------------------------------------------------- def refresh_ct for i in 0...$game_party.actors.size actor = $game_party.actors[i] line_height = 120 / PARA_CTB::PARTY_SIZE actor_y = i * line_height + 4 # When the CT gauge is full, color of gauge ct_color_full = PARA_CTB::COLOR_FULL # Color of CT gauge (left hand edge) ct_color_start = actor.full_ct ? ct_color_full : PARA_CTB::COLOR_LEFT # Color of CT gauge (right hand edge) ct_color_end = actor.full_ct ? ct_color_full : PARA_CTB::COLOR_RIGHT if @level_up_flags[i] != true and actor.ct_visible draw_meter(actor.now_ct, actor.max_ct, 344, actor_y+14, 100, 8, ct_color_start, ct_color_end) elsif @level_up_flags[i] != true draw_meter(0, actor.max_ct, 344, actor_y+14, 100, 8, ct_color_start, ct_color_end) end end end #-------------------------------------------------------------------------- # * Frame Renewal #-------------------------------------------------------------------------- def update super end #-------------------------------------------------------------------------- # * Draw HP # actor : actor # x : draw spot x-coordinate # y : draw spot y-coordinate # width : draw spot width #-------------------------------------------------------------------------- def draw_actor_hp(actor, x, y, width = 144) # Draw the "HP" text self.contents.font.color = system_color self.contents.font.size = 16 self.contents.draw_text(x, y+2, 32, 32, $data_system.words.hp) self.contents.font.color = normal_color self.contents.font.size = PARA_CTB::HPSP_FONT_SIZE if PARA_CTB::MAX_DRAW # Draw the MaxHP self.contents.draw_text(x, y, width, 32, actor.maxhp.to_s, 2) text_size = self.contents.text_size(actor.maxhp.to_s) text_x = x + width - text_size.width - 12 self.contents.draw_text(text_x, y, 12, 32, "/", 1) # Draw the HP self.contents.font.color = actor.hp == 0 ? knockout_color : actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color text_x = text_x - text_size.width self.contents.draw_text(text_x, y, text_size.width, 32, actor.hp.to_s, 2) else self.contents.font.color = actor.hp == 0 ? knockout_color : actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color self.contents.draw_text(x, y, width, 32, actor.hp.to_s, 2) end end #-------------------------------------------------------------------------- # * Draw SP # actor : actor # x : draw spot x-coordinate # y : draw spot y-coordinate # width : draw spot width #-------------------------------------------------------------------------- def draw_actor_sp(actor, x, y, width = 144) # Draw the "SP" text self.contents.font.color = system_color self.contents.font.size = 16 self.contents.draw_text(x, y+2, 32, 32, $data_system.words.sp) self.contents.font.color = normal_color self.contents.font.size = PARA_CTB::HPSP_FONT_SIZE if PARA_CTB::MAX_DRAW # Draw the MaxSP self.contents.draw_text(x, y, width, 32, actor.maxsp.to_s, 2) text_size = self.contents.text_size(actor.maxsp.to_s) text_x = x + width - text_size.width - 12 self.contents.draw_text(text_x, y, 12, 32, "/", 1) # Draw the SP self.contents.font.color = actor.sp == 0 ? knockout_color : actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color text_x = text_x - text_size.width self.contents.draw_text(text_x, y, text_size.width, 32, actor.sp.to_s, 2) else self.contents.font.color = actor.sp == 0 ? knockout_color : actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color self.contents.draw_text(x, y, width, 32, actor.sp.to_s, 2) end end end #============================================================================== # ** Window_BattleStatus_enemy #------------------------------------------------------------------------------ # This window displays the status of all enemy troops on the battle screen. #============================================================================== class Window_BattleStatus_enemy < Window_Base #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize super(0, 320, 160, 160) self.contents = Bitmap.new(width - 32, height - 32) self.back_opacity = PARA_CTB::WINDOW_MAIN_OPACITY refresh end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear self.contents.font.color = normal_color self.contents.font.size = PARA_CTB::ENEMY_FONT_SIZE @exist_enemies = [] if $game_troop.enemies != nil if PARA_CTB::ENEMY_GROUPING ememy_list = [] ememy_list_index = [] # Loop through the Enemy Troop for i in 0...$game_troop.enemies.size enemy = $game_troop.enemies[i] if enemy.exist? if ememy_list.include?(enemy.name) ememy_list_index[ememy_list.index(enemy.name)] += 1 else # Store the enemy name ememy_list.push(enemy.name) ememy_list_index[ememy_list.index(enemy.name)] = 1 end end end # Draw the name and number of the enemy enemy_index = 0 for enemy_name in ememy_list enemy_y = enemy_index * (PARA_CTB::ENEMY_FONT_SIZE+6) + 4 if ememy_list_index[enemy_index] > 1 enemy_name = enemy_name + " " + ememy_list_index[enemy_index].to_s end self.contents.draw_text(4, enemy_y, 160, 20, enemy_name) enemy_index += 1 end else # Draw the enemy name enemy_index = 0 for i in 0...$game_troop.enemies.size enemy = $game_troop.enemies[i] if enemy.exist? @exist_enemies.push(enemy) line_height = PARA_CTB::ENEMY_FONT_SIZE + 6 if PARA_CTB::ENEMY_DRAWING_MATER != 0 line_height += 10 end enemy_y = enemy_index * line_height + 4 self.contents.draw_text(4, enemy_y, 160, 20, enemy.name) enemy_index += 1 if PARA_CTB::ENEMY_DRAWING_MATER == 1 hp_color1 = PARA_CTB::HP_COLOR_LEFT hp_color2 = PARA_CTB::HP_COLOR_RIGHT y = enemy_y + PARA_CTB::ENEMY_FONT_SIZE + 3 draw_meter(enemy.hp, enemy.maxhp, 4, y, 80, 8, hp_color1, hp_color2) end end end end end refresh_ct end #-------------------------------------------------------------------------- # * Refresh the CT gauge #-------------------------------------------------------------------------- def refresh_ct if PARA_CTB::ENEMY_DRAWING_MATER == 2 and @exist_enemies != nil enemy_index = 0 for enemy in @exist_enemies line_height = PARA_CTB::ENEMY_FONT_SIZE + 16 enemy_y = enemy_index * line_height + 4 y = enemy_y + PARA_CTB::ENEMY_FONT_SIZE + 3 # When the CT gauge is full, color of gauge ct_color_full = PARA_CTB::COLOR_FULL # Color of CT gauge (the left edge) ct_color_start = enemy.full_ct ? ct_color_full : PARA_CTB::COLOR_LEFT # Color of CT gauge (the right edge) ct_color_end = enemy.full_ct ? ct_color_full : PARA_CTB::COLOR_RIGHT if enemy.ct_visible draw_meter(enemy.now_ct, enemy.max_ct, 4, y, 100, 8, ct_color_start, ct_color_end) else draw_meter(0, enemy.max_ct, 4, y, 100, 8, ct_color_start, ct_color_end) end enemy_index += 1 end end end end #============================================================================== # ** Window_Base #------------------------------------------------------------------------------ # This class is for all in-game windows. #============================================================================== class Window_Base < Window #-------------------------------------------------------------------------- # * Draw the meter #-------------------------------------------------------------------------- def draw_meter(now, max, x, y, width, height, start_color, end_color=start_color ) self.contents.fill_rect(x, y, width, height, PARA_CTB::FRAME_COLOR) self.contents.fill_rect(x+PARA_CTB::FRAME_BORDER, y+PARA_CTB::FRAME_BORDER, width- PARA_CTB::FRAME_BORDER*2, height-PARA_CTB::FRAME_BORDER*2, PARA_CTB::BACK_COLOR) now = now > max ? max : now percentage = max != 0 ? (width-2) * now / max.to_f : 0 if start_color == end_color self.contents.fill_rect(x+1, y+1, percentage, height-2, start_color) else for i in 1..percentage r = start_color.red + (end_color.red - start_color.red) / percentage * i g = start_color.green + (end_color.green - start_color.green) / percentage * i b = start_color.blue + (end_color.blue - start_color.blue) / percentage * i a = start_color.alpha + (end_color.alpha - start_color.alpha) / percentage * i self.contents.fill_rect(x+i, y+1, 1, height-2, Color.new(r, g, b, a)) end end end end #============================================================================== # ** Game_Battler #------------------------------------------------------------------------------ # This class deals with battlers. It's used as a superclass for the Game_Actor # and Game_Enemy classes. #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # * Public Instance Variables #-------------------------------------------------------------------------- attr_accessor :max_ct attr_accessor :now_ct attr_accessor :full_ct attr_accessor :countup attr_accessor :ct_visible attr_accessor :movable_backup #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- alias ctb_initialize initialize def initialize ctb_initialize @max_ct = 0 @now_ct = 0 @full_ct = false @countup = true @ct_visible = true end end #============================================================================== # ** Sprite_Battler #------------------------------------------------------------------------------ # This sprite is used to display the battler.It observes the Game_Character # class and automatically changes sprite conditions. #============================================================================== class Sprite_Battler < RPG::Sprite #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- alias ctb_update update def update ctb_update if @battler != nil if @battler.full_ct and @battler.ct_visible # Change the color tone of the battler when the CT Gauge is full fullct_color = PARA_CTB::FULL_CT_COLOR self.tone = fullct_color else fullct_color = Tone.new(0,0,0) self.tone = fullct_color end end end end #============================================================================== # ** Window_Help #------------------------------------------------------------------------------ # This window shows skill and item explanations along with actor status. #============================================================================== class Window_Help < Window_Base #-------------------------------------------------------------------------- # * Set Actor # actor : status displaying actor #-------------------------------------------------------------------------- alias set_actor_ctb set_actor def set_actor(actor) if PARA_CTB::HELP_DRAWING_MATER_ACTOR self.contents.clear draw_actor_name(actor, 4, 0) draw_actor_state(actor, 140, 0) hp_color1 = PARA_CTB::HP_COLOR_LEFT hp_color2 = PARA_CTB::HP_COLOR_RIGHT draw_meter(actor.hp, actor.maxhp, 316, 18, 112, 8, hp_color1, hp_color2) draw_actor_hp(actor, 284, 0) sp_color1 = PARA_CTB::SP_COLOR_LEFT sp_color2 = PARA_CTB::SP_COLOR_RIGHT draw_meter(actor.sp, actor.maxsp, 492, 18, 112, 8, sp_color1, sp_color2) draw_actor_sp(actor, 460, 0) @actor = actor @text = nil self.visible = true else set_actor_ctb(actor) end end #-------------------------------------------------------------------------- # * Set Enemy # enemy : name and status displaying enemy #-------------------------------------------------------------------------- alias set_enemy_ctb set_enemy def set_enemy(enemy) if PARA_CTB::HELP_DRAWING_MATER_ENEMY self.contents.clear draw_actor_name(enemy, 4, 0) draw_actor_state(enemy, 140, 0) hp_color1 = PARA_CTB::HP_COLOR_LEFT hp_color2 = PARA_CTB::HP_COLOR_RIGHT draw_meter(enemy.hp, enemy.maxhp, 316, 18, 112, 8, hp_color1, hp_color2) draw_actor_hp(enemy, 284, 0) sp_color1 = PARA_CTB::SP_COLOR_LEFT sp_color2 = PARA_CTB::SP_COLOR_RIGHT draw_meter(enemy.sp, enemy.maxsp, 492, 18, 112, 8, sp_color1, sp_color2) draw_actor_sp(enemy, 460, 0) self.visible = true else set_enemy_ctb(enemy) end end end I modified the script to display the selection rectangle to indicate which character is selected, And fixed a bug with the character switching. When ever you pressed L or R to switch active character, it wasn't cycling through in order. I fixed that (I am pretty sure, everything appears to be in order) (selecting the characters goes in order of who was ready first. But that *may* involve editing the way turns are handled.) EDIT: All scripts go above main, and as always, if you have any issues let me know :) Edited April 11, 2011 by kellessdee Share this post Link to post Share on other sites
Tenoukii 0 Report post Posted April 11, 2011 Thats superr! Thanks so much! You shall be credited (obviously) :D Share this post Link to post Share on other sites
kellessdee 48 Report post Posted April 11, 2011 No problem :) Glad I could help! Everything works the way you want it to? Share this post Link to post Share on other sites
Tenoukii 0 Report post Posted April 11, 2011 Yep, it works perfectly (: and with the new transition I think it looks pretty fetch :P I've added a mini demo thingy to the projects page if your interested in trying it out and giving some feedback? Share this post Link to post Share on other sites