Affichage des dégats amélioré

Poster un nouveau sujet   Répondre au sujet

Voir le sujet précédent Voir le sujet suivant Aller en bas

Affichage des dégats amélioré

Message par Rayne Darkmist le Lun 21 Mai - 8:03

Bon, je mets un scripte qui permet de mettre les dégats en courbe et que vous pouvez changer facilement la police.

Auteur : Corbaque

UTILISATION : Créer un scripte nommé "Sprite" en haut de "Main" et suivez les indications à la fin du message.


Code:

#===================================
# Créé par Corbaque
#---------------------------------------------------------------
# Le 19/08/2006
#---------------------------------------------------------------
# Modification de l'affichage des dégats
#---------------------------------------------------------------
# Version 1.0
#===================================
module RPG
  # ces trois constantes sont modifiables
  POLICE_DES_LETTRES = "Arial"
  COULEUR_DES_LETTRES = Color.new(255, 255, 255)
  COULEUR_DU_CONTOUR = Color.new(0, 0, 0)
  # Modification de la classe sprite
  class Sprite < ::Sprite
    @@_animations = []
    @@_reference_count = {}
    def initialize(viewport = nil)
      super(viewport)
      @_whiten_duration = 0
      @_appear_duration = 0
      @_escape_duration = 0
      @_collapse_duration = 0
      @_damage_duration = 0
      @_animation_duration = 0
      @_blink = false
    end
    def dispose
      dispose_damage
      dispose_animation
      dispose_loop_animation
      super
    end
    def whiten
      self.blend_type = 0
      self.color.set(255, 255, 255, 128)
      self.opacity = 255
      @_whiten_duration = 16
      @_appear_duration = 0
      @_escape_duration = 0
      @_collapse_duration = 0
    end
    def appear
      self.blend_type = 0
      self.color.set(0, 0, 0, 0)
      self.opacity = 0
      @_appear_duration = 16
      @_whiten_duration = 0
      @_escape_duration = 0
      @_collapse_duration = 0
    end
    def escape
      self.blend_type = 0
      self.color.set(0, 0, 0, 0)
      self.opacity = 255
      @_escape_duration = 32
      @_whiten_duration = 0
      @_appear_duration = 0
      @_collapse_duration = 0
    end
    def collapse
      self.blend_type = 1
      self.color.set(255, 64, 64, 255)
      self.opacity = 255
      @_collapse_duration = 48
      @_whiten_duration = 0
      @_appear_duration = 0
      @_escape_duration = 0
    end
    #-----------------------------------------------------------
    # Redéfinition de la methode damage
    #-----------------------------------------------------------
    def damage(value, critical)
      # Suprimme le dernière affichage de
      # dommage si ce n'est pas fait
      dispose_damage
      # Transforme la valeur en chaine de caractère
      if value.is_a?(Numeric)
        damage_string = value.abs.to_s
      else
        damage_string = value.to_s
      end
      # définition du bitmap
      bitmap = Bitmap.new(160, 48)
      bitmap.font.name = POLICE_DES_LETTRES
      bitmap.font.size = 32
      bitmap.font.color = COULEUR_DU_CONTOUR
      bitmap.draw_text(-1, 12, 160, 36, damage_string, 1)
      bitmap.draw_text(0, 13, 160, 36, damage_string, 1)
      bitmap.draw_text(1, 13, 160, 36, damage_string, 1)
      bitmap.draw_text(1, 12, 160, 36, damage_string, 1)
      if value.is_a?(Numeric) and value < 0
        bitmap.font.color.set(176, 255, 144)
      else
        bitmap.font.color = COULEUR_DES_LETTRES
      end
      bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
      if critical
        bitmap.font.size = 20
        bitmap.font.color = COULEUR_DU_CONTOUR
        bitmap.draw_text(-1, -1, 160, 20, "COUP CRITIQUE", 1)
        bitmap.draw_text(+1, -1, 160, 20, "COUP CRITIQUE", 1)
        bitmap.draw_text(-1, +1, 160, 20, "COUP CRITIQUE", 1)
        bitmap.draw_text(+1, +1, 160, 20, "COUP CRITIQUE", 1)
        bitmap.font.color = COULEUR_DES_LETTRES
        bitmap.draw_text(0, 0, 160, 20, "COUP CRITIQUE", 1)
      end
      # Définition du sprite
      @_damage_sprite = ::Sprite.new(self.viewport)
      @_damage_sprite.bitmap = bitmap
      @_damage_sprite.ox = 80
      @_damage_sprite.oy = 20
      @_damage_sprite.x = self.x
      @_damage_sprite.y = self.y - self.oy / 2
      @_damage_sprite.z = 3000
      @_damage_sprite.zoom_x = 0
      @_damage_sprite.zoom_y = 0
      @_damage_duration = 40
    end
    def animation(animation, hit)
      dispose_animation
      @_animation = animation
      return if @_animation == nil
      @_animation_hit = hit
      @_animation_duration = @_animation.frame_max
      animation_name = @_animation.animation_name
      animation_hue = @_animation.animation_hue
      bitmap = RPG::Cache.animation(animation_name, animation_hue)
      if @@_reference_count.include?(bitmap)
        @@_reference_count[bitmap] += 1
      else
        @@_reference_count[bitmap] = 1
      end
      @_animation_sprites = []
      if @_animation.position != 3 or not @@_animations.include?(animation)
        for i in 0..15
          sprite = ::Sprite.new(self.viewport)
          sprite.bitmap = bitmap
          sprite.visible = false
          @_animation_sprites.push(sprite)
        end
        unless @@_animations.include?(animation)
          @@_animations.push(animation)
        end
      end
      update_animation
    end
    def loop_animation(animation)
      return if animation == @_loop_animation
      dispose_loop_animation
      @_loop_animation = animation
      return if @_loop_animation == nil
      @_loop_animation_index = 0
      animation_name = @_loop_animation.animation_name
      animation_hue = @_loop_animation.animation_hue
      bitmap = RPG::Cache.animation(animation_name, animation_hue)
      if @@_reference_count.include?(bitmap)
        @@_reference_count[bitmap] += 1
      else
        @@_reference_count[bitmap] = 1
      end
      @_loop_animation_sprites = []
      for i in 0..15
        sprite = ::Sprite.new(self.viewport)
        sprite.bitmap = bitmap
        sprite.visible = false
        @_loop_animation_sprites.push(sprite)
      end
      update_loop_animation
    end
    def dispose_damage
      if @_damage_sprite != nil
        @_damage_sprite.bitmap.dispose
        @_damage_sprite.dispose
        @_damage_sprite = nil
        @_damage_duration = 0
      end
    end
    def dispose_animation
      if @_animation_sprites != nil
        sprite = @_animation_sprites[0]
        if sprite != nil
          @@_reference_count[sprite.bitmap] -= 1
          if @@_reference_count[sprite.bitmap] == 0
            sprite.bitmap.dispose
          end
        end
        for sprite in @_animation_sprites
          sprite.dispose
        end
        @_animation_sprites = nil
        @_animation = nil
      end
    end
    def dispose_loop_animation
      if @_loop_animation_sprites != nil
        sprite = @_loop_animation_sprites[0]
        if sprite != nil
          @@_reference_count[sprite.bitmap] -= 1
          if @@_reference_count[sprite.bitmap] == 0
            sprite.bitmap.dispose
          end
        end
        for sprite in @_loop_animation_sprites
          sprite.dispose
        end
        @_loop_animation_sprites = nil
        @_loop_animation = nil
      end
    end
    def blink_on
      unless @_blink
        @_blink = true
        @_blink_count = 0
      end
    end
    def blink_off
      if @_blink
        @_blink = false
        self.color.set(0, 0, 0, 0)
      end
    end
    def blink?
      @_blink
    end
    def effect?
      @_whiten_duration > 0 or
      @_appear_duration > 0 or
      @_escape_duration > 0 or
      @_collapse_duration > 0 or
      @_damage_duration > 0 or
      @_animation_duration > 0
    end
    #-----------------------------------------------------------
    # Redéfinition de la methode update
    #-----------------------------------------------------------
    def update
      # Appel la class superieur (::Sprite)
      super
      #################################
      #      Mise à jour des autres éléments        #
      #################################
      if @_whiten_duration > 0
        @_whiten_duration -= 1
        self.color.alpha = 128 - (16 - @_whiten_duration) * 10
      end
      if @_appear_duration > 0
        @_appear_duration -= 1
        self.opacity = (16 - @_appear_duration) * 16
      end
      if @_escape_duration > 0
        @_escape_duration -= 1
        self.opacity = 256 - (32 - @_escape_duration) * 10
      end
      if @_collapse_duration > 0
        @_collapse_duration -= 1
        self.opacity = 256 - (48 - @_collapse_duration) * 6
      end
      #################################
      # Mouvement du sprite
      if @_damage_duration > 0
        @_damage_duration -= 1
        case @_damage_duration
        when 28..39
          # Modification de la position du sprite
          @_damage_sprite.x += 30 * Math.cos(@_damage_duration * Math::PI / 5)
          @_damage_sprite.y += 15 * Math.sin(@_damage_duration * Math::PI / 5)
          @_damage_sprite.zoom_x += 0.1
          @_damage_sprite.zoom_y += 0.1
        end
        # fondu d'opacitée
        @_damage_sprite.opacity = 256 - (12 - @_damage_duration) * 32
        # supprime le sprite si l'effet est terminé
        if @_damage_duration == 0
          dispose_damage
        end
      end
      #################################
      #      Mise à jour des autres éléments        #
      #################################
      if @_animation != nil and (Graphics.frame_count % 2 == 0)
        @_animation_duration -= 1
        update_animation
      end
      if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
        update_loop_animation
        @_loop_animation_index += 1
        @_loop_animation_index %= @_loop_animation.frame_max
      end
      if @_blink
        @_blink_count = (@_blink_count + 1) % 32
        if @_blink_count < 16
          alpha = (16 - @_blink_count) * 6
        else
          alpha = (@_blink_count - 16) * 6
        end
        self.color.set(255, 255, 255, alpha)
      end
      @@_animations.clear
      #################################
    end
    def update_animation
      if @_animation_duration > 0
        frame_index = @_animation.frame_max - @_animation_duration
        cell_data = @_animation.frames[frame_index].cell_data
        position = @_animation.position
        animation_set_sprites(@_animation_sprites, cell_data, position)
        for timing in @_animation.timings
          if timing.frame == frame_index
            animation_process_timing(timing, @_animation_hit)
          end
        end
      else
        dispose_animation
      end
    end
    def update_loop_animation
      frame_index = @_loop_animation_index
      cell_data = @_loop_animation.frames[frame_index].cell_data
      position = @_loop_animation.position
      animation_set_sprites(@_loop_animation_sprites, cell_data, position)
      for timing in @_loop_animation.timings
        if timing.frame == frame_index
          animation_process_timing(timing, true)
        end
      end
    end
    def animation_set_sprites(sprites, cell_data, position)
      for i in 0..15
        sprite = sprites[i]
        pattern = cell_data[i, 0]
        if sprite == nil or pattern == nil or pattern == -1
          sprite.visible = false if sprite != nil
          next
        end
        sprite.visible = true
        sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
        if position == 3
          if self.viewport != nil
            sprite.x = self.viewport.rect.width / 2
            sprite.y = self.viewport.rect.height - 160
          else
            sprite.x = 320
            sprite.y = 240
          end
        else
          sprite.x = self.x - self.ox + self.src_rect.width / 2
          sprite.y = self.y - self.oy + self.src_rect.height / 2
          sprite.y -= self.src_rect.height / 4 if position == 0
          sprite.y += self.src_rect.height / 4 if position == 2
        end
        sprite.x += cell_data[i, 1]
        sprite.y += cell_data[i, 2]
        sprite.z = 2000
        sprite.ox = 96
        sprite.oy = 96
        sprite.zoom_x = cell_data[i, 3] / 100.0
        sprite.zoom_y = cell_data[i, 3] / 100.0
        sprite.angle = cell_data[i, 4]
        sprite.mirror = (cell_data[i, 5] == 1)
        sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
        sprite.blend_type = cell_data[i, 7]
      end
    end
    def animation_process_timing(timing, hit)
      if (timing.condition == 0) or
        (timing.condition == 1 and hit == true) or
        (timing.condition == 2 and hit == false)
        if timing.se.name != ""
          se = timing.se
          Audio.se_play("Audio/SE/" + se.name, se.volume, se.pitch)
        end
        case timing.flash_scope
        when 1
          self.flash(timing.flash_color, timing.flash_duration * 2)
        when 2
          if self.viewport != nil
            self.viewport.flash(timing.flash_color, timing.flash_duration * 2)
          end
        when 3
          self.flash(nil, timing.flash_duration * 2)
        end
      end
    end
    def x=(x)
      sx = x - self.x
      if sx != 0
        if @_animation_sprites != nil
          for i in 0..15
            @_animation_sprites[i].x += sx
          end
        end
        if @_loop_animation_sprites != nil
          for i in 0..15
            @_loop_animation_sprites[i].x += sx
          end
        end
      end
      super
    end
    def y=(y)
      sy = y - self.y
      if sy != 0
        if @_animation_sprites != nil
          for i in 0..15
            @_animation_sprites[i].y += sy
          end
        end
        if @_loop_animation_sprites != nil
          for i in 0..15
            @_loop_animation_sprites[i].y += sy
          end
        end
      end
      super
    end
  end
end



Au début du code, il y a :
Code:
#---------------------------------------------------------------
# Version 1.0
#===================================
module RPG
  # ces trois constantes sont modifiables
  POLICE_DES_LETTRES = "Arial"
  COULEUR_DES_LETTRES = Color.new(255, 255, 255)
  COULEUR_DU_CONTOUR = Color.new(0, 0, 0)
  # Modification de la classe sprite


Modifiez la police et la couleur pour avoir un résultat de meilleure qualité.


N'oubliez pas de mettre Corbaque dans les crédits

Rayne Darkmist
Meneur des Vagues
Meneur des Vagues

Nombre de messages: 390
Age: 16
Date d'inscription: 26/03/2007

Voir le profil de l'utilisateur http://enigmatopia.iquebec.com

Revenir en haut Aller en bas

Re: Affichage des dégats amélioré

Message par Scythe Darklight le Lun 21 Mai - 13:37

t'as surement un screen avec ça ^^

Il m'a lair jolie ce script

Scythe Darklight
Invoqueur de tempête
Invoqueur de tempête

Nombre de messages: 1166
Age: 20
Date d'inscription: 17/08/2006

Voir le profil de l'utilisateur http://www.freewebs.com/scythedarklight/

Revenir en haut Aller en bas

Re: Affichage des dégats amélioré

Message par Ox le Lun 21 Mai - 13:44

Ce n'est pas"Combat Amélioré" mais "Affichage des dégats amélioré" ;) .Sinon j'ai testé le script,et il ets super !

Ox

Nombre de messages: 10
Age: 14
Date d'inscription: 24/03/2007

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Affichage des dégats amélioré

Message par Rayne Darkmist le Lun 21 Mai - 21:12

Mais les screens sont inutiles...c'est un mouvement. Mais je pense que j'ai ça :


Les dégats sont affichés différamment (C'est un screen d'une vieille veersion de mon RPG en construction)

Rayne Darkmist
Meneur des Vagues
Meneur des Vagues

Nombre de messages: 390
Age: 16
Date d'inscription: 26/03/2007

Voir le profil de l'utilisateur http://enigmatopia.iquebec.com

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


Poster un nouveau sujet   Répondre au sujet
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum