So bene di non essere più un frequentatore assiduo del forum, e questo perchè per un po' ho deciso di staccarmi dal making oppure di provare da solo isolandomi un po' dal resto della community per evitare di dover sempre stare a calpestare i piedi a tutti. Però mi son reso conto di avere delle grosse lacune soprattutto a livello di scripting e senza di voi non sono nulla ;_;
Arrivo subito al sodo:
Ho l'animation system di Minkoff per il mio BS. Sì, quello tanto amato e odiato.
E vorrei che questo Mink**** però funzioni solo per gli actor, ovvero per il party del giocatore. Gli altri mostri devono essere gestiti come nel BS standard. Non uso RTAB, ma dubito che comunque questo possa intralciare.
#==============================================================================# ** Sprite_Battler#------------------------------------------------------------------------------# Animated Battlers by Minkoff#============================================================================== class Sprite_Battler < RPG::Sprite #-------------------------------------------------------------------------- # * Initialize #-------------------------------------------------------------------------- alias cbs_initialize initialize def initialize(viewport, battler = nil) @speed = 7 @frames = 4 @poses = 10 @stationary_enemies = true @stationary_actors = true @calculate_speed = true @phasing = false @frame = 0 @pose = 0 @last_time = 0 @last_move_time = 0 cbs_initialize(viewport, battler) viewport.z = 99 end #-------------------------------------------------------------------------- # * Update #-------------------------------------------------------------------------- alias cbs_update update def update return unless @battler # Regular Update cbs_update # Start Routine unless @started @width = @width / @frames @height = @height / @poses @display_x = @battler.screen_x @display_y = @battler.screen_y @destination_x = @display_x @destination_y = @display_y end # Setup Sprite self.src_rect.set(@width * @frame, @height * @pose, @width, @height) self.mirror = @battler.is_a?(Game_Enemy) unless @started # Position Sprite self.x = @display_x self.y = @display_y self.z = @display_y self.ox = @width / 2 self.oy = @height # Setup Animation time = Graphics.frame_count / (Graphics.frame_rate / @speed) if @last_time < time @frame = (@frame + 1) % @frames if @frame == 0 or @reload if @freeze @frame = @frames - 1 return end @pose = state end end @last_time = time # Move It move if moving # Finish Up @started = true end #-------------------------------------------------------------------------- # * Current State #-------------------------------------------------------------------------- def state # Damage State if [nil,{}].include?(@battler.damage) # Battler Fine @state = 0 # Battler Wounded @state = 0 if @battler.hp < @battler.maxhp / 4 # Battler Dead @state = 2 if @battler.dead? end # Guarding State @state = 3 if @battler.guarding? # Moving State if moving # Battler Moving Left @state = 4 if moving.eql?(0) # Battler Moving Right @state = 5 if moving.eql?(1) end # Return State return @state end #-------------------------------------------------------------------------- # * Move #-------------------------------------------------------------------------- def move time = Graphics.frame_count / (Graphics.frame_rate.to_f / (@speed * 5)) if @last_move_time < time # Pause for Animation return if @pose != state # Phasing if @phasing d1 = (@display_x - @original_x).abs d2 = (@display_y - @original_y).abs d3 = (@display_x - @destination_x).abs d4 = (@display_y - @destination_y).abs self.opacity = [255 - ([d1 + d2, d3 + d4].min * 1.75).to_i, 0].max end # Calculate Difference difference_x = (@display_x - @destination_x).abs difference_y = (@display_y - @destination_y).abs # Done? Reset, Stop if [difference_x, difference_y].max.between?(0, 8) @display_x = @destination_x @display_y = @destination_y @pose = state return end # Calculate Movement Increments increment_x = increment_y = 1 if difference_x < difference_y increment_x = 1.0 / (difference_y.to_f / difference_x) elsif difference_y < difference_x increment_y = 1.0 / (difference_x.to_f / difference_y) end # Calculate Movement Speed if @calculate_speed total = 0; $game_party.actors.each{ |actor| total += actor.agi } speed = @battler.agi.to_f / (total / $game_party.actors.size) increment_x *= speed increment_y *= speed end # Multiply and Move multiplier_x = (@destination_x - @display_x > 0 ? 8 : -8) multiplier_y = (@destination_y - @display_y > 0 ? 8 : -8) @display_x += (increment_x * multiplier_x).to_i @display_y += (increment_y * multiplier_y).to_i end @last_move_time = time end #-------------------------------------------------------------------------- # * Set Movement #-------------------------------------------------------------------------- def setmove(destination_x, destination_y) unless (@battler.is_a?(Game_Enemy) and @stationary_enemies) or (@battler.is_a?(Game_Actor) and @stationary_actors) @original_x = @display_x @original_y = @display_y @destination_x = destination_x @destination_y = destination_y end end #-------------------------------------------------------------------------- # * Movement Check #-------------------------------------------------------------------------- def moving if (@display_x != @destination_x and @display_y != @destination_y) return (@display_x > @destination_x ? 0 : 1) end end #-------------------------------------------------------------------------- # * Set Pose #-------------------------------------------------------------------------- def pose=(pose) @pose = pose @frame = 0 end #-------------------------------------------------------------------------- # * Freeze #-------------------------------------------------------------------------- def freeze @freeze = true endend#==============================================================================# ** Game_Actor#============================================================================== class Game_Actor #-------------------------------------------------------------------------- # * Actor X Coordinate #-------------------------------------------------------------------------- def screen_x if self.index != nil return self.index * 45 + 450 else return 0 end end #-------------------------------------------------------------------------- # * Actor Y Coordinate #-------------------------------------------------------------------------- def screen_y return self.index * 35 + 200 end #-------------------------------------------------------------------------- # * Actor Z Coordinate #-------------------------------------------------------------------------- def screen_z return screen_y endend #==============================================================================# ** Scene_Battle#============================================================================== class Scene_Battle #-------------------------------------------------------------------------- # * Action Animation, Movement #-------------------------------------------------------------------------- alias cbs_update_phase4_step3 update_phase4_step3 def update_phase4_step3(battler = @active_battler) @rtab = !@target_battlers target = (@rtab ? battler.target : @target_battlers)[0] @moved = {} unless @moved return if @spriteset.battler(battler).moving case battler.current_action.kind when 0 # Attack if not (@moved[battler] or battler.guarding?) offset = (battler.is_a?(Game_Actor) ? 40 : -40) @spriteset.battler(battler).setmove(target.screen_x + offset, target.screen_y) @moved[battler] = true return elsif not battler.guarding? @spriteset.battler(battler).pose = 6 + rand(2) @spriteset.battler(battler).setmove(battler.screen_x, battler.screen_y) end when 1 # Skill @spriteset.battler(battler).pose = 8 when 2 # Item @spriteset.battler(battler).pose = 8 end @moved[battler] = false @rtab ? cbs_update_phase4_step3(battler) : cbs_update_phase4_step3 end #-------------------------------------------------------------------------- # * Hit Animation #-------------------------------------------------------------------------- alias cbs_update_phase4_step4 update_phase4_step4 def update_phase4_step4(battler = @active_battler) for target in (@rtab ? battler.target : @target_battlers) damage = (@rtab ? target.damage[battler] : target.damage) if damage.is_a?(Numeric) and damage > 0 @spriteset.battler(target).pose = 1 end end @rtab ? cbs_update_phase4_step4(battler) : cbs_update_phase4_step4 end #-------------------------------------------------------------------------- # * Victory Animation #-------------------------------------------------------------------------- alias cbs_start_phase5 start_phase5 def start_phase5 for actor in $game_party.actors return if @spriteset.battler(actor).moving end for actor in $game_party.actors unless actor.dead? @spriteset.battler(actor).pose = 9 @spriteset.battler(actor).freeze end end cbs_start_phase5 end #-------------------------------------------------------------------------- # * Change Arrow Viewport #-------------------------------------------------------------------------- alias cbs_start_enemy_select start_enemy_select def start_enemy_select cbs_start_enemy_select @enemy_arrow.dispose @enemy_arrow = Arrow_Enemy.new(@spriteset.viewport2) @enemy_arrow.help_window = @help_window endend #==============================================================================# ** Spriteset_Battle#============================================================================== class Spriteset_Battle #-------------------------------------------------------------------------- # * Change Enemy Viewport #-------------------------------------------------------------------------- alias cbs_initialize initialize def initialize cbs_initialize @enemy_sprites = [] for enemy in $game_troop.enemies.reverse @enemy_sprites.push(Sprite_Battler.new(@viewport2, enemy)) end end #-------------------------------------------------------------------------- # * Find Sprite From Battler Handle #-------------------------------------------------------------------------- def battler(handle) for sprite in @actor_sprites + @enemy_sprites return sprite if sprite.battler == handle end return false endend #==============================================================================# ** Arrow_Base#============================================================================== class Arrow_Base < Sprite #-------------------------------------------------------------------------- # * Reposition Arrows #-------------------------------------------------------------------------- alias cbs_initialize initialize def initialize(viewport) cbs_initialize(viewport) self.ox = 14 # 32 self.oy = 10 # 40 endend
Does anyone actually know how to get this ship work in the right way?
Question
Narutofan95
Sup, gente.
So bene di non essere più un frequentatore assiduo del forum, e questo perchè per un po' ho deciso di staccarmi dal making oppure di provare da solo isolandomi un po' dal resto della community per evitare di dover sempre stare a calpestare i piedi a tutti. Però mi son reso conto di avere delle grosse lacune soprattutto a livello di scripting e senza di voi non sono nulla ;_;
Arrivo subito al sodo:
Ho l'animation system di Minkoff per il mio BS. Sì, quello tanto amato e odiato.
E vorrei che questo Mink**** però funzioni solo per gli actor, ovvero per il party del giocatore. Gli altri mostri devono essere gestiti come nel BS standard. Non uso RTAB, ma dubito che comunque questo possa intralciare.
#==============================================================================# ** Sprite_Battler#------------------------------------------------------------------------------# Animated Battlers by Minkoff#============================================================================== class Sprite_Battler < RPG::Sprite #-------------------------------------------------------------------------- # * Initialize #-------------------------------------------------------------------------- alias cbs_initialize initialize def initialize(viewport, battler = nil) @speed = 7 @frames = 4 @poses = 10 @stationary_enemies = true @stationary_actors = true @calculate_speed = true @phasing = false @frame = 0 @pose = 0 @last_time = 0 @last_move_time = 0 cbs_initialize(viewport, battler) viewport.z = 99 end #-------------------------------------------------------------------------- # * Update #-------------------------------------------------------------------------- alias cbs_update update def update return unless @battler # Regular Update cbs_update # Start Routine unless @started @width = @width / @frames @height = @height / @poses @display_x = @battler.screen_x @display_y = @battler.screen_y @destination_x = @display_x @destination_y = @display_y end # Setup Sprite self.src_rect.set(@width * @frame, @height * @pose, @width, @height) self.mirror = @battler.is_a?(Game_Enemy) unless @started # Position Sprite self.x = @display_x self.y = @display_y self.z = @display_y self.ox = @width / 2 self.oy = @height # Setup Animation time = Graphics.frame_count / (Graphics.frame_rate / @speed) if @last_time < time @frame = (@frame + 1) % @frames if @frame == 0 or @reload if @freeze @frame = @frames - 1 return end @pose = state end end @last_time = time # Move It move if moving # Finish Up @started = true end #-------------------------------------------------------------------------- # * Current State #-------------------------------------------------------------------------- def state # Damage State if [nil,{}].include?(@battler.damage) # Battler Fine @state = 0 # Battler Wounded @state = 0 if @battler.hp < @battler.maxhp / 4 # Battler Dead @state = 2 if @battler.dead? end # Guarding State @state = 3 if @battler.guarding? # Moving State if moving # Battler Moving Left @state = 4 if moving.eql?(0) # Battler Moving Right @state = 5 if moving.eql?(1) end # Return State return @state end #-------------------------------------------------------------------------- # * Move #-------------------------------------------------------------------------- def move time = Graphics.frame_count / (Graphics.frame_rate.to_f / (@speed * 5)) if @last_move_time < time # Pause for Animation return if @pose != state # Phasing if @phasing d1 = (@display_x - @original_x).abs d2 = (@display_y - @original_y).abs d3 = (@display_x - @destination_x).abs d4 = (@display_y - @destination_y).abs self.opacity = [255 - ([d1 + d2, d3 + d4].min * 1.75).to_i, 0].max end # Calculate Difference difference_x = (@display_x - @destination_x).abs difference_y = (@display_y - @destination_y).abs # Done? Reset, Stop if [difference_x, difference_y].max.between?(0, 8) @display_x = @destination_x @display_y = @destination_y @pose = state return end # Calculate Movement Increments increment_x = increment_y = 1 if difference_x < difference_y increment_x = 1.0 / (difference_y.to_f / difference_x) elsif difference_y < difference_x increment_y = 1.0 / (difference_x.to_f / difference_y) end # Calculate Movement Speed if @calculate_speed total = 0; $game_party.actors.each{ |actor| total += actor.agi } speed = @battler.agi.to_f / (total / $game_party.actors.size) increment_x *= speed increment_y *= speed end # Multiply and Move multiplier_x = (@destination_x - @display_x > 0 ? 8 : -8) multiplier_y = (@destination_y - @display_y > 0 ? 8 : -8) @display_x += (increment_x * multiplier_x).to_i @display_y += (increment_y * multiplier_y).to_i end @last_move_time = time end #-------------------------------------------------------------------------- # * Set Movement #-------------------------------------------------------------------------- def setmove(destination_x, destination_y) unless (@battler.is_a?(Game_Enemy) and @stationary_enemies) or (@battler.is_a?(Game_Actor) and @stationary_actors) @original_x = @display_x @original_y = @display_y @destination_x = destination_x @destination_y = destination_y end end #-------------------------------------------------------------------------- # * Movement Check #-------------------------------------------------------------------------- def moving if (@display_x != @destination_x and @display_y != @destination_y) return (@display_x > @destination_x ? 0 : 1) end end #-------------------------------------------------------------------------- # * Set Pose #-------------------------------------------------------------------------- def pose=(pose) @pose = pose @frame = 0 end #-------------------------------------------------------------------------- # * Freeze #-------------------------------------------------------------------------- def freeze @freeze = true endend#==============================================================================# ** Game_Actor#============================================================================== class Game_Actor #-------------------------------------------------------------------------- # * Actor X Coordinate #-------------------------------------------------------------------------- def screen_x if self.index != nil return self.index * 45 + 450 else return 0 end end #-------------------------------------------------------------------------- # * Actor Y Coordinate #-------------------------------------------------------------------------- def screen_y return self.index * 35 + 200 end #-------------------------------------------------------------------------- # * Actor Z Coordinate #-------------------------------------------------------------------------- def screen_z return screen_y endend #==============================================================================# ** Scene_Battle#============================================================================== class Scene_Battle #-------------------------------------------------------------------------- # * Action Animation, Movement #-------------------------------------------------------------------------- alias cbs_update_phase4_step3 update_phase4_step3 def update_phase4_step3(battler = @active_battler) @rtab = !@target_battlers target = (@rtab ? battler.target : @target_battlers)[0] @moved = {} unless @moved return if @spriteset.battler(battler).moving case battler.current_action.kind when 0 # Attack if not (@moved[battler] or battler.guarding?) offset = (battler.is_a?(Game_Actor) ? 40 : -40) @spriteset.battler(battler).setmove(target.screen_x + offset, target.screen_y) @moved[battler] = true return elsif not battler.guarding? @spriteset.battler(battler).pose = 6 + rand(2) @spriteset.battler(battler).setmove(battler.screen_x, battler.screen_y) end when 1 # Skill @spriteset.battler(battler).pose = 8 when 2 # Item @spriteset.battler(battler).pose = 8 end @moved[battler] = false @rtab ? cbs_update_phase4_step3(battler) : cbs_update_phase4_step3 end #-------------------------------------------------------------------------- # * Hit Animation #-------------------------------------------------------------------------- alias cbs_update_phase4_step4 update_phase4_step4 def update_phase4_step4(battler = @active_battler) for target in (@rtab ? battler.target : @target_battlers) damage = (@rtab ? target.damage[battler] : target.damage) if damage.is_a?(Numeric) and damage > 0 @spriteset.battler(target).pose = 1 end end @rtab ? cbs_update_phase4_step4(battler) : cbs_update_phase4_step4 end #-------------------------------------------------------------------------- # * Victory Animation #-------------------------------------------------------------------------- alias cbs_start_phase5 start_phase5 def start_phase5 for actor in $game_party.actors return if @spriteset.battler(actor).moving end for actor in $game_party.actors unless actor.dead? @spriteset.battler(actor).pose = 9 @spriteset.battler(actor).freeze end end cbs_start_phase5 end #-------------------------------------------------------------------------- # * Change Arrow Viewport #-------------------------------------------------------------------------- alias cbs_start_enemy_select start_enemy_select def start_enemy_select cbs_start_enemy_select @enemy_arrow.dispose @enemy_arrow = Arrow_Enemy.new(@spriteset.viewport2) @enemy_arrow.help_window = @help_window endend #==============================================================================# ** Spriteset_Battle#============================================================================== class Spriteset_Battle #-------------------------------------------------------------------------- # * Change Enemy Viewport #-------------------------------------------------------------------------- alias cbs_initialize initialize def initialize cbs_initialize @enemy_sprites = [] for enemy in $game_troop.enemies.reverse @enemy_sprites.push(Sprite_Battler.new(@viewport2, enemy)) end end #-------------------------------------------------------------------------- # * Find Sprite From Battler Handle #-------------------------------------------------------------------------- def battler(handle) for sprite in @actor_sprites + @enemy_sprites return sprite if sprite.battler == handle end return false endend #==============================================================================# ** Arrow_Base#============================================================================== class Arrow_Base < Sprite #-------------------------------------------------------------------------- # * Reposition Arrows #-------------------------------------------------------------------------- alias cbs_initialize initialize def initialize(viewport) cbs_initialize(viewport) self.ox = 14 # 32 self.oy = 10 # 40 endendDoes anyone actually know how to get this ship work in the right way?
Edited by Narutofan95http://i46.tinypic.com/295vf6e.png
merutochan
Bandcamp | Twitter | Tumblr
Link to comment
Share on other sites
3 answers to this question
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now