Raven Administrateur
Messages postés : 1338 Date d'inscription : 20/04/2013 Jauge LPC :
| Sujet: Extra Movement Frames 1.0 Mar 18 Juin 2013 - 1:12 | |
| 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 |
|
Zexion Administrateur
Messages postés : 6228 Date d'inscription : 04/01/2012 Jauge LPC :
| Sujet: Re: Extra Movement Frames 1.0 Mar 18 Juin 2013 - 1:16 | |
| Tiens, ça c'est sympa. Je connaissais un script similaire pour XP, mais j'avais jamais vu sur Ace. Aller hop, des points pour toi. :p |
|
Cataclysm Chevalier (niveau 4)
Messages postés : 121 Date d'inscription : 25/07/2011 Jauge LPC :
| Sujet: Re: Extra Movement Frames 1.0 Mar 18 Juin 2013 - 7:35 | |
| Waox, très intéressant comme script ! merci beaucoup, j'imagine déjà les animations fluides qu'on va pouvoir faire :3 ! |
|
Contenu sponsorisé
| Sujet: Re: Extra Movement Frames 1.0 | |
| |
|