Sign in to follow this  
Followers 0
Fegarur

[RMVX] Charas con Frames extra

3 posts in this topic

Descripción:
Como ya sabréis, los charas del RMVX tienen menosposiciones por animación que los charas del RMXP. Como resultado, se supone que la imagen iría algo más brusca. Bien, para poder usar charas con la cantidad de posiciones que queráis (y obtener resultados más suaves) es para lo que se hizo este script, permitiendo incluso usar charas del RMXP en el RMVX.
Disfrutadlo. smiliez.de_2283.gif

Script:
[SPOILER]
CODE
#==============================================================================
#  Extra Movement Frames v. 1.0
#  Autor: modern algebra (rmrk.net)
#  Fecha: 20 de Enero de 2008
#------------------------------------------------------------------------------
#   Instrucciones:
#     Coloca este script sobre Main en el Editor.Para añadir un chara con
#     frames extra, simplemente cámbiale el nombre de la imagen a algo
#     de este estilo:
#          !$%[<número de frames>]<Nombre Normal>
#
#     Ejemplo: !$%[4]001-Fighter01    
#     Eso hará que el gráfico 001-Fighter01 tenga 4 frames.
#------------------------------------------------------------------------------
# ** Game_Character
#------------------------------------------------------------------------------
#  Resumen de cambios:
#     aliased methods - update_animation
#     new class variables - height divisor, width divisor
#     new methods - calculate_divisors
#==============================================================================

class Game_Character
 #--------------------------------------------------------------------------
 # * Public Instance Variables
 #--------------------------------------------------------------------------
 attr_reader :height_divisor  # The height of a single frame
 attr_reader :width_divisor   # number of frames in the x direction
 #--------------------------------------------------------------------------
 # * Calculate Divisors
 #--------------------------------------------------------------------------
 #  Sets up the instance variables required
 #--------------------------------------------------------------------------
 def calculate_divisors
   return unless @previous_character.nil? || @previous_character != @character_name
   bitmap = Cache.character (@character_name)
   sign = @character_name[/^[\!\$].[\%]\[\d*\]/]
   if !sign.nil? && sign.size > 5
     @original_pattern = 0
     @width_divisor = sign[4, sign.size - 5].to_i
     @height_divisor = 4
   elsif !sign.nil? && sign.include? ('$')
     @width_divisor = 3
     @height_divisor = 4
   else
     @width_divisor = 12
     @height_divisor = 8
   end
   @previous_character = @character_name
 end
 #--------------------------------------------------------------------------
 # * Update Animation
 #--------------------------------------------------------------------------
 #  Change the hard coded values to ones dependent on character graphic format
 #--------------------------------------------------------------------------
 alias ma_extra_movement_frames_anim_upd update_animation
 def update_animation
   saved_anime_count = @anime_count
   pattern_original = @pattern
   speed = @move_speed + (dash? ? 1 : 0)
   ma_extra_movement_frames_anim_upd
   if (saved_anime_count > (18 - speed * 2)) && (@step_anime || (@stop_count <= 0))
     @pattern = (pattern_original + 1) % @width_divisor
   end
 end
end

#==============================================================================
# * Sprite Character
#------------------------------------------------------------------------------
#  Summary of changes:
#     aliased methods - update_src_rect, update_bitmap
#==============================================================================

class Sprite_Character
 #--------------------------------------------------------------------------
 # * Update Src Rect
 #--------------------------------------------------------------------------
 #  Interpret multiple movement frames: Changed pattern
 #--------------------------------------------------------------------------
 alias ma_extra_movement_frames_src_rect_upd update_src_rect
 def update_src_rect
   if @tile_id == 0
     ma_extra_movement_frames_src_rect_upd
     index = @character.character_index
     pattern = @character.pattern < @character.width_divisor ? @character.pattern : 1
     sx = (index % 4 * 3 + pattern) * @cw
     sy = (index / 4 * 4 + (@character.direction - 2) / 2) * @ch
     self.src_rect.set(sx, sy, @cw, @ch)
   end
 end
 #--------------------------------------------------------------------------
 # * Update Bitmap
 #--------------------------------------------------------------------------
 #  Change hard coded values to ones dependent on character graphic
 #--------------------------------------------------------------------------
 alias ma_extra_movement_frames_bmp_upd update_bitmap
 def update_bitmap
   @character.calculate_divisors
   saved_tile_id = @tile_id
   saved_character_name = @character_name
   saved_character_index = @character_index
   ma_extra_movement_frames_bmp_upd
   if saved_tile_id  != @character.tile_id or
      saved_character_name != @character.character_name or
      saved_character_index != @character.character_index
     unless @tile_id > 0
       @cw = bitmap.width / @character.width_divisor
       @ch = bitmap.height / @character.height_divisor
       self.ox = @cw / 2
       self.oy = @ch
     end
   end
 end
end

#==============================================================================
# ** Window Base
#------------------------------------------------------------------------------
#  Summary of changes:
#     overwritten methods - draw_character
#==============================================================================

class Window_Base
 #--------------------------------------------------------------------------
 # * Draw Charater (overwritten for extra movement frames)
 #     character_name  : the name of the character file
 #     character_index : the index of the character in the file
 #     x               : the x position to draw
 #     y               : the y position to draw
 #--------------------------------------------------------------------------
 def draw_character(character_name, character_index, x, y)
   return if character_name == nil
   bitmap = Cache.character(character_name)
   sign = character_name[/^[\!\$].[\%]\[\d*\]/]
   if !sign.nil? && sign.size > 5
     cw = bitmap.width / sign[4, sign.size - 5].to_i
     ch = bitmap.height / 4
   elsif sign != nil and sign.include?('$')
     cw = bitmap.width / 3
     ch = bitmap.height / 4
   else
     cw = bitmap.width / 12
     ch = bitmap.height / 8
   end
   n = character_index
   src_rect = Rect.new((n%4*3+1)*cw, (n/4*4)*ch, cw, ch)
   self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
 end
end
[/SPOILER]

Instrucciones:
Están en el script, pero hoy me siento generoso:

user posted image Coloca el script sobre Main, en el Editor de Scripts.
user posted image Para usar un chara con posiciones extra nombra a su imagen de esta forma:
QUOTE
!$%[<número de frames>]<Nombre Normal>


Ejemplo: Si quiero usar el chara 001-Fighter01 del RMXP (vamos, el de toda la vida xD.png), tendrás que renombrar su imagen para que quede:
!$%[4]001-Fighter01. Sencillo, ¿no?

Créditos:
Script creado por Modern Algebra.
0

Share this post


Link to post
Share on other sites
pedazo de aporte ^^
0

Share this post


Link to post
Share on other sites
Es impresionante de este modo podría tener charas de 4 otros de 6 otros de 8 y todos usados al mismo tiempo, un script así tendría que estar para el XP y que fuese compatible con XAS...XD

Gracias por el aporte, solo por esto ya me replanteo pasarme a la próxima generación...XD (aunque tengo el VX, soy un poco reacio de usarlo.)
0

Share this post


Link to post
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
Sign in to follow this  
Followers 0