Jump to content
Rpg²S Forum
  • 0

Impostare il Minkoff solo per il party


Narutofan95
 Share

Question

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  endend

Does anyone actually know how to get this ship work in the right way?

Edited by Narutofan95
Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 0
Potrei cercare di modificare il codice come ti serve... Oppure crei un mostro con tutte le animazioni uguali :).

http://img256.imageshack.us/img256/7639/ihateyou.gif

Un uomo senza religione è come un pesce senza bicicletta.

http://img18.imageshack.us/img18/3668/decasoft1.png

http://rpg2s.net/gif/SCContest1Oct.gifhttp://rpg2s.net/gif/SCContest2Oct.gifhttp://rpg2s.net/gif/SCContest2Oct.gif

Link to comment
Share on other sites

  • 0

Modifica rapida rapida, vedi se funziona

#==============================================================================# ** 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	  if @battler.is_a?(Game_Actor)		@width = @width / @frames		@height = @height / @poses	  end	  @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) if @battler.is_a?(Game_Actor)	#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

Ti ho tolto il fatto che i battler dei nemici vengono specchiati, se vuoi rimetterlo leva # da

#self.mirror = @battler.is_a?(Game_Enemy) unless @started

 

Senno puoi fare come dice MasterSion ma in termini di spazio occupato ne risentirai parecchio :P

Link to comment
Share on other sites

  • 0

Innanzitutto grazie a entrambi per le risposte!

 

@Mastersion: Avevo pensato anche io a qualcosa del genere, ma essendo poco preciso nel settare le pose, seppur tutte uguali, ho preferito chiedere se c'era una soluzione più semplice lasciando questo sistema come seconda possibilità

 

@Sleeping Leonarth: Non ti smentisci mai! *-* Funziona, grazie infinite!

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...