¡Bienvenido a Universo Maker!
¿Es esta la primera vez que visitas el foro? Si es así te recomendamos que te registres para tener completo acceso a todas las áreas y secciones del foro, así también podrás participar activamente en la comunidad. Si ya tienes una cuenta, conectate cuanto antes.
Iniciar Sesión Registrarme

No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo Mensaje [Página 1 de 1.]

#1 Extra movement frames[RPGMVX ACE] el Vie Ene 25, 2013 2:34 am

P-cate

avatar
Autor:Modern algebra
Fuente:pase por aquí
Versión:1.0.1
Descripción:Este script permite usar sprites con más frames que 3(lo mismo que multi frames,sólo que en este se pueden usar charas de mayor tamaño)

(charas como estos o de más frames)



Script
Código:
#==============================================================================
#    Extra Movement Frames
#    Version: 1.0.1
#    Author: modern algebra (rmrk.net)
#    Date: 26 September 2012
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Description:
#   
#    This script allows you to import character sprites with more than 3 frames
#  for movement animation. In other words, it allows you to animate sprites a
#  little more smoothly. One use for it is it allows RMXP format characters to
#  be imported directly into a VXA game without editing (although you will need
#  to rename the file).
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Instructions:
#   
#    Paste this script into its own slot in the Script Editor, above Main but
#  below Materials. If you are using my Composite Graphics script, then this
#  script must be placed in a slot below Composite Graphics.
#
#    To create a sprite with extra movement frames, all you need to do is
#  rename the character graphic to something of the form:
#
#      Regular_Name%(x)
#        where:
#          x is the number of frames in each character sprite

#  EXAMPLES:
#
#    $001-Fighter01%(4)
#      This graphic is a single character with four frames of animation. [XP]
#    022-Actors12%(6)
#      This graphic would be interpreted as a character sheet of 8 characters,
#      each having six frames of animation.
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#    Additionally, this script also allows you to specify the "idle" frame (the
#  frame where the sprite is not moving), and also the pattern if wish to so
#  specify. In essence, all you need to do is add those integers after the
#  number of frames:
#
#      Regular_Name%(x y1 y2 y3 ... yx)
#        where:
#          x is the number of frames in each character sprite
#          y1 is the idle frame (the frame shown when sprite is not moving)
#          y2 ... yx are the pattern.
#
#  Keep in mind that the first frame in a sprite is index 0, the second frame
#  is index 1, etc.
#
#    Where y1 is excluded, it is assumed to be 0. Where y2 ... yx are excluded,
#  the pattern is assumed to simply cycle through the frames one by one until
#  it repeats.
#
#  EXAMPLES:
#
#    $003-Fighter03%(4 2)
#      This graphic is a single character with four frames of animation. The
#      idle frame is 2 (the third one over). The pattern when moving would be
#      2 3 0 1, 2 3 0 1, etc.
#    032-People05%(4 0 1 0 3 2 1)
#      This graphic would be interpreted as a character sheet of 8 characters,
#      each having four frames of animation. The idle frame is 0 (the first
#      in the sheet), and the pattern is 0 1 0 3 2 1, 0 1 0 3 2 1, etc.
#==============================================================================

$imported = {} unless $imported
$imported[:MA_ExtraMovementFrames] = true

#==============================================================================
# *** MA_ExtraMovementFrames
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  This module holds a method for calculating width and height of an emf
# character frame
#==============================================================================

module MA_ExtraMovementFrames
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Check if Character has extra movement frames
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def ma_char_is_emf_sprite?(character_name)
    character_name && !character_name[/\%[\(\[].+?[\)\]]/].nil?
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Derive Frames Array
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def maemf_get_frames(character_name)
    character_name = "" unless character_name
    frames = !character_name[/\%[\(\[](.+?)[\)\]]/] ? [] :
      $1.scan(/\d+/).collect { |s| s.to_i }
    frames[0] = 3 unless frames[0] # If empty, then set to default 3
    frames.push(1, 2, 1, 0) if frames[0] == 3 && frames.size < 2
    frames[1] = 0 unless frames[1] # Set idle frame
    if frames.size < 3
      # Create pattern
      (frames[0] - 1).times {|i| frames.push((frames[1] + i + 1) % frames[0]) }
    end
    return frames
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Calculate Frame Size
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def maemf_calc_frame_size(character_name, bitmap, frames = [])
    character_name = "" unless character_name
    frames = maemf_get_frames(character_name) if frames.empty?
    cw = bitmap.width / (frames[0] ? frames[0] : 3)
    ch = bitmap.height / 4
    sign = character_name[/^[\!\$]./]
    if !sign || !sign.include?('$')
      cw /= 4
      ch /= 2
    end
    return cw, ch
  end
end

# Compatibility with Composite Graphics
if $imported[:MA_CompositeGraphics]
  #============================================================================
  # *** Cache
  #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  #  Summary of Changes:
  #    aliased method - macgve_make_unique_name
  #============================================================================
  class << Cache
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    # * Make Unique Name
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    alias macgemf_uniqname_3tc8 macgve_make_unique_name
    def macgve_make_unique_name(cg_array = [], *args)
      result = macgemf_uniqname_3tc8(cg_array, *args) # Call Original Method
      # Add %(x) code to name if the first graphic in the array contains it.
      result += $1 if cg_array[0] && cg_array[0].filename[/(\%[\(\[].+?[\)\]])/]
      result
    end
  end
end

#==============================================================================
# ** Game_CharacterBase
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Summary of Changes:
#    aliased method - straighten; update_anime_pattern; initialize;
#      set_graphic; character_name=
#    new methods - maemf_init_char_frames
#==============================================================================

class Game_CharacterBase
  include MA_ExtraMovementFrames
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Straighten
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias maemf_straghtn_5sb3 straighten
  def straighten(*args, &block)
    maemf_straghtn_5sb3(*args, &block) # Run original method
    @pattern = @original_pattern if @walk_anime || @step_anime
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Update Anime Pattern
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias maemf_updanim_ptrn_2yv5 update_anime_pattern
  def update_anime_pattern(*args)
    if @ma_char_is_emf_sprite # If an emf sprite
      if !@step_anime && @stop_count > 0 # Reset to stationary
        @maemf_frame_index = 0
        @pattern = @original_pattern
      else
        # Next Pattern
        @maemf_frame_index = (@maemf_frame_index + 1) % @maemf_character_pattern.size
        @pattern = @maemf_character_pattern[@maemf_frame_index]
      end
    else
      maemf_updanim_ptrn_2yv5(*args) # Call original method
    end
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Initialize Character Frames
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def maemf_init_char_frames
    @maemf_frame_index = 0 # Initialize Index
    # Save this value for faster reference
    @ma_char_is_emf_sprite = ma_char_is_emf_sprite?(character_name)
    if @ma_char_is_emf_sprite
      # Get pattern
      @maemf_character_pattern = maemf_get_frames(character_name)
      @maemf_character_pattern.shift # Remove frame number
      @original_pattern = @maemf_character_pattern[0]
    else
      @maemf_character_pattern = []
    end
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Initialize Character Frames Proc
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.maemf_init_char_frames_proc
    Proc.new { |method_name|
      alias_method(:"maemf_#{method_name}_2ev9", method_name) # Alias
      define_method(method_name) do |*args| # Define method
        send(:"maemf_#{method_name}_2ev9", *args) # Call original method
        maemf_init_char_frames
      end
    }
  end
  proc = maemf_init_char_frames_proc
  [:initialize, :set_graphic].each { |name| proc.call(name) }
end

#==============================================================================
# ** Game_Player/Follower/Vehicle/Event
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  This aliases methods in these classes that change @character_name in order
# to call maemf_init_char_frames
#==============================================================================

class Game_Player
  # Refresh
  maemf_init_char_frames_proc.call(:refresh)
end

class Game_Follower
  # Refresh
  maemf_init_char_frames_proc.call(:refresh)
end

class Game_Vehicle
  # Load System Settings
  maemf_init_char_frames_proc.call(:load_system_settings)
end

class Game_Event 
  proc = maemf_init_char_frames_proc
  # Clear Page Settings & Setup Page Settings
  [:clear_page_settings, :setup_page_settings].each { |name| proc.call(name) }
end

#==============================================================================
# ** Sprite_Character
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Summary of Changes:
#    aliased methods - set_character_bitmap; update_src_rect
#    new methods - ma_set_emf_character_bitmap; ma_update_emf_src_rect
#==============================================================================

class Sprite_Character
  include MA_ExtraMovementFrames
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Set Character Bitmap
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias maemf_setcharbmp_4rm6 set_character_bitmap
  def set_character_bitmap(*args)
    @emf_char = ma_char_is_emf_sprite?(@character_name)
    @emf_char ? ma_set_emf_character_bitmap : maemf_setcharbmp_4rm6(*args)
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Update Transfer Origin Rectangle
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias maemf_updtsrcrect_2kq5 update_src_rect
  def update_src_rect(*args)
    @emf_char ? ma_update_emf_src_rect : maemf_updtsrcrect_2kq5(*args)
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Set Character Bitmap
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def ma_set_emf_character_bitmap
    self.bitmap = Cache.character(@character_name)
    @emf_char_frames = maemf_get_frames(@character_name)
    @cw, @ch = maemf_calc_frame_size(@character_name, bitmap, @emf_char_frames)
    self.ox = @cw / 2
    self.oy = @ch
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Update Transfer Origin Rectangle
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def ma_update_emf_src_rect
    if @tile_id == 0
      index = @character.character_index
      pattern = @character.pattern < @emf_char_frames[0] ? @character.pattern : @emf_char_frames[1]
      sx = (index % 4 * @emf_char_frames[0] + pattern) * @cw
      sy = (index / 4 * 4 + (@character.direction - 2) / 2) * @ch
      self.src_rect.set(sx, sy, @cw, @ch)
    end
  end
end

#==============================================================================
# ** Window_Base
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Summary of Changes:
#    aliased method - draw_character
#    new method - ma_draw_emf_character
#==============================================================================

class Window_Base
  include MA_ExtraMovementFrames
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Draw Character Graphic
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias maemf_drawcharct_3kq6 draw_character
  def draw_character(character_name, *args)
    character_name[/\%[\(\[].+?[\)\]]/] ? ma_draw_emf_character(character_name, *args) :
      maemf_drawcharct_3kq6(character_name, *args)
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Draw Extra Movement Frames Character Graphic
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def ma_draw_emf_character(character_name, character_index, x, y)
    return unless character_name
    if !ma_char_is_emf_sprite?(character_name)
      # Draw regular if there is no frame specification in the name
      maemf_drawcharct_3kq6(character_name, *args)
    else
      bitmap = Cache.character(character_name)
      frames = maemf_get_frames(character_name)
      cw, ch = maemf_calc_frame_size(character_name, bitmap, frames)
      n = character_index
      src_rect = Rect.new((n%4*frames[0]+frames[1])*cw, (n/4*4)*ch, cw, ch)
      contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
    end
  end
end
Instrucciones:
*Copia este script en el editor de scripts arriba de Main pero debajo de Materials,pero si estás usando el Script(del mismo creador) "Composite graphics"(no sabría como decirlo en español xD),tendrás que ponerlo un espacio más abajo de este último.((igual si pueden leanse la pagina en la sección de "fuente" ya que no se si lo traduje bien,sólo por las dudas))

*Para crear un script con más frames tienes que renombrar el Sprite

Regular_Name%(n)

"n" es el número de frames que tiene la animación

EJEMPLOS:

*$001-Fighter01%(4)
Este gráfico es un solo personaje con 4 frames de animación

*022-Actors12%(6)
Este gráfico sería una plantilla con 8 personajes los cuales tendrían 6 frames de animación cada uno

el resto de instrucciones en el script xDD;;

NOTA1:Lo probé y funcionó 8D
NOTA 2:este es mi primer aporte así que be gentle(?),okno xD,traté de traducir lo que pude!,sólo quería hacer saber de la existencia de este script c:,espero que les sirva Ópalo Contento

#2 Re: Extra movement frames[RPGMVX ACE] el Vie Ene 25, 2013 2:43 pm

Aarl

avatar
¡Genial aporte Cate! Está muy bien, le da un toque genial de mayor... "profesionalidad", al permitir más frames de movimiento.

Te dejo 2 Makedas por el aporte.
Saludos~

#3 Re: Extra movement frames[RPGMVX ACE] el Vie Ene 25, 2013 4:23 pm

Cuervoso

avatar
Me gusta... Aunque, como normalmente creo mis propios charas, y ya 4 frames convierten mi vida en una tortura, dudo usar 6 u 8 frames; las posibilidades de que mi cabeza estalle serían alarmantes.

De todas formas, no sería "imposible" que empiece a ocupar este script... Me gusta que los movimientos se vean fluídos.

De todas formas, buen aporte.

Saludos.






Cuervoso! No te pases ¬_¬

Contenido patrocinado


Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

Permisos de este foro:
No puedes responder a temas en este foro.