Partagez
Aller en bas
avatar
DantonSlip
Membre

Nombre de messages : 398
Age : 27
Distinction : 1er membre de la communauté Curse
Date d'inscription : 31/05/2013
http://blazingsun.hol.es/Archive.pdf

Extra Movement Frames 1.0

le Jeu 20 Juin 2013 - 11:23
Extra Movement Frames
Version : 1.0
Auteur : Modern Algebra


A tous ceux qui sont las du peu de frames disponibles sous RMVX Ace, voici un script concocté par Modern Algebra.

Utilisation : 
Une fois le script installé au dessus de "main", renommez les fichiers voulus de la manière suivante :

 
Code:
$001-Fighter01%(4)

Si le personnage ne comporte que 4 frames.
 
Code:
022-Actors12%(6)

Si le personnage comporte 6 frames avec 8 charas. N'oubliez pas de mettre le $ devant si votre image est plus haute qu'un personnage lambda de VXA. 

Plus d'informations sur l'utilisation (précision sur la "idle" frame, etc) dans le script.


Code:
#==============================================================================
#    Extra Movement Frames
#    Version: 1.0.1
#    Author: modern algebra (rmrk.net)
#    Date: 26 September 2012
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Description:
#    
#    Ce script vous permettra d'importer des charset avec plus de trois frames pour animer #les mouvements de vos personnages. En d'autres mots, ça vous permet d'animer vos sprite #de manière un peu plus fluide. L'une des principales utilisation de ce script est #d'importer les charset du forum RMXP directement dans les jeux RMVXA sans avoir besoin de #passer par l'édition via un logiciel extérieur (bien que vous deviez tout de même #renommer le fichier
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Instructions:
#    
#    Collez ce script dans son propre emplacement dans l'éditeur de scripts, au dessus de #"Main" mais en dessous de "Materials". Si vous utilisez mon script "Composite Graphics", #alors ce script devra être placé dans un emplacement en dessous de "Composite Graphics".
#
#    Pour créer un sprite avec ce script, tout ce que vous avez à faire est de renommer #l'image de votre character en quelque chose comme ça :
#   rename the character graphic to something of the form:
#
#      Nomdelimage%(x)
#       Où:
#          x est le nombre de frames dans chaque ligne de sprite.
#  
#  EXEMPLES:
#
#    $001-Fighter01%(4)
#      Cette image est un simple character avec quatre frames d'animation. (XP)
#    022-Actors12%(6)
#      Cette image sera interprêtée comme une feuille de huit charas qui ont chacun six #frames d'animation.
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#    A savoir que ce script vous permet de specifier le "idle" frame (la frame ou le #sprite ne bouge pas), mais aussi , le pattern si vous souhaitez le spécifier. Tout ce que #vous avez à faire est d'ajouter ces mentions suivantes au nom de votre image, après le #nombre de frames : #
#      Nomdelimage%(x y1 y2 y3 ... yx)
#        Où:
#          x est le nombre de frames dans chaque ligne de sprite.
#          y1 est le "idle" frame" (la frame que vous voyez quand votre personnage ne #bouge pas.)
#          y2 ... yx sont les pattern.
#
#   Garder à l'esprit que la première frame dans le sprite est 0, la seconde 1, etc.
#  
#    Où y1 est exclu, on suppose que c'est 0. Quand y2 ... yx est exclu,
#  le pattern est simplement supposé  faire défiler les images en boucles une par une #jusqu'à ce qu'elles se répètent.
#
#  EXEMPLES:
#
#    $003-Fighter03%(4 2)
#      Cette image est un simple character avec quatre frames d'animation. (XP) Le
#      idle frame est 2 (le troisième que l'on voit). Le pattern quand il bouge sera donc
#      2 3 0 1, 2 3 0 1, etc.
#    032-People05%(4 0 1 0 3 2 1)
#     Cette image sera interprêtée comme une feuille de character de huit charas qui ont #chacun six frames d'animation. Le idle frame est 0 (le premier de la feuille), et le #pattern est 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

avatar
Korndor
Staffeux retraité

Nombre de messages : 4959
Age : 105
Localisation : Erem Vehyx
Distinction : Champion de boxe et au lit ! :O [Wax]
Être Mythique [Mister]
Papi Korndor qui a l'ostéoporose [Skillo]
Soldat Ikéa [Coco']
Un bonhomme, un vrai ! [Neresis]
Vieillard acariâtre [Didier Gustin]
Date d'inscription : 16/12/2007
http://www.rpgmakervx-fr.com/

Re: Extra Movement Frames 1.0

le Jeu 20 Juin 2013 - 14:55
Un script bien utile, merci du partage. Smile

*se tâte pour ajouter un sprite à ses charas, flemme en perfectionnisme s'affrontent dans un combat mental assourdissant*


Dernière édition par Korndor le Jeu 20 Juin 2013 - 15:25, édité 1 fois
avatar
Elisa'
Administrateur

Nombre de messages : 2923
Age : 20
Localisation : Par là-bas !
Distinction : Mon héritière que je chéris
[Coco' Smile]
Plus que 2 ans avant d'épouser Coco' ! Compte à rebours lancé !
[Auto-distinction]

Adepte du "Je le savais" alors qu'elle le savait pas.
Date d'inscription : 30/05/2009

Re: Extra Movement Frames 1.0

le Jeu 20 Juin 2013 - 15:24
+1 point de participation, merci du partage Smile

_________________


Cliquez ici pour voter pour la commu'
avatar
DantonSlip
Membre

Nombre de messages : 398
Age : 27
Distinction : 1er membre de la communauté Curse
Date d'inscription : 31/05/2013
http://blazingsun.hol.es/Archive.pdf

Re: Extra Movement Frames 1.0

le Ven 21 Juin 2013 - 10:28
De rien. Je me suis dit que ça pouvait être utile. Surtout qu'en le modifiant un peu, il permet de faire énormément de choses sympa. Wink
avatar
Masamune
Membre

Nombre de messages : 255
Localisation : A la forge!
Distinction : aucune
Date d'inscription : 24/12/2012

Re: Extra Movement Frames 1.0

le Ven 21 Juin 2013 - 10:35
Je ne suis pas un pro du script et je comprends pas trop ce script qui apparement a l'air sympa ^^
avatar
DantonSlip
Membre

Nombre de messages : 398
Age : 27
Distinction : 1er membre de la communauté Curse
Date d'inscription : 31/05/2013
http://blazingsun.hol.es/Archive.pdf

Re: Extra Movement Frames 1.0

le Ven 21 Juin 2013 - 10:38
J'essaierai de faire un tutoriel d'utilisation dans le week-end alors.
avatar
Masamune
Membre

Nombre de messages : 255
Localisation : A la forge!
Distinction : aucune
Date d'inscription : 24/12/2012

Re: Extra Movement Frames 1.0

le Ven 21 Juin 2013 - 10:56
D'accord merci Smile
avatar
Korndor
Staffeux retraité

Nombre de messages : 4959
Age : 105
Localisation : Erem Vehyx
Distinction : Champion de boxe et au lit ! :O [Wax]
Être Mythique [Mister]
Papi Korndor qui a l'ostéoporose [Skillo]
Soldat Ikéa [Coco']
Un bonhomme, un vrai ! [Neresis]
Vieillard acariâtre [Didier Gustin]
Date d'inscription : 16/12/2007
http://www.rpgmakervx-fr.com/

Re: Extra Movement Frames 1.0

le Ven 21 Juin 2013 - 19:08
Red Rusty Raven a écrit:De rien. Je me suis dit que ça pouvait être utile. Surtout qu'en le modifiant un peu, il permet de faire énormément de choses sympa. Wink

Tu aurais des exemples déjà réalisés à partir de ça ? ^^
avatar
DantonSlip
Membre

Nombre de messages : 398
Age : 27
Distinction : 1er membre de la communauté Curse
Date d'inscription : 31/05/2013
http://blazingsun.hol.es/Archive.pdf

Re: Extra Movement Frames 1.0

le Ven 21 Juin 2013 - 19:08
Oui, mon jeu. Very Happy Vous verrez dans la démo d'Août.
avatar
Korndor
Staffeux retraité

Nombre de messages : 4959
Age : 105
Localisation : Erem Vehyx
Distinction : Champion de boxe et au lit ! :O [Wax]
Être Mythique [Mister]
Papi Korndor qui a l'ostéoporose [Skillo]
Soldat Ikéa [Coco']
Un bonhomme, un vrai ! [Neresis]
Vieillard acariâtre [Didier Gustin]
Date d'inscription : 16/12/2007
http://www.rpgmakervx-fr.com/

Re: Extra Movement Frames 1.0

le Ven 21 Juin 2013 - 19:37
Haaaaaan le coup de puuuub ! Very Happy

Je voulais dire des "idées" de modifs du script ^^
avatar
DantonSlip
Membre

Nombre de messages : 398
Age : 27
Distinction : 1er membre de la communauté Curse
Date d'inscription : 31/05/2013
http://blazingsun.hol.es/Archive.pdf

Re: Extra Movement Frames 1.0

le Ven 21 Juin 2013 - 19:43
Ah... Bah déjà, tu peux modifier le nombre max de frames. Après, en jouant avec tes ressources et ce script tu peux faire une palette super large de comportements à ton chara. Wink
avatar
Korndor
Staffeux retraité

Nombre de messages : 4959
Age : 105
Localisation : Erem Vehyx
Distinction : Champion de boxe et au lit ! :O [Wax]
Être Mythique [Mister]
Papi Korndor qui a l'ostéoporose [Skillo]
Soldat Ikéa [Coco']
Un bonhomme, un vrai ! [Neresis]
Vieillard acariâtre [Didier Gustin]
Date d'inscription : 16/12/2007
http://www.rpgmakervx-fr.com/

Re: Extra Movement Frames 1.0

le Ven 21 Juin 2013 - 20:24
Je vois... Huhu !
Vivement sa sortie, que je puisse enfin tester la bête ! Smile
Contenu sponsorisé

Re: Extra Movement Frames 1.0

Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum