Partagez
Aller en bas
avatar
dricc
Membre

Nombre de messages : 2753
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009

Evenements avec charsets simples

le Jeu 20 Jan 2011 - 19:03
J'ai un peu de mal à expliquer ce que fait ce script , j'avoue Smile J'éditerais si je trouve mieux .

Bon, vous savez que pour un evenement , on associe un charset .
Les charsets sont des planches de 4 * 2 personnage , chaque personnage etant lui-meme une planche de 3 * 4 .
Si on met un $ devant le nom , on met juste un seul personnage sur une planche de 3 * 4 .
Et bien si on met un = devant le nom au lieu d'un $ , on peux se contenter d'une image simple .

Bien evidement , votre evenement ne doit surtout pas etre mis en "animé à l'arret" et doit etre immobile .
Attention : ce n'est pas visible sur l'éditeur . Il faut lancer le jeu pour voir .

Techniquement , c'est une modification de 2 classes standard : Window_Base et surtout Sprite_Character . ça ne m'a pas pris plus d'un 1/4 d'heure Smile

Code:

# image simples pour un evenement
# Auteur :dricc
# si vous créez un evenement et que vous lui associez une image appelée "=<nom que vous voulez>.png"
# ce script fera en sorte que l'image soit affichée en entier (et pas un petit morceau)


#==============================================================================
# ** Window_Base
#------------------------------------------------------------------------------
#  This is a superclass of all windows in the game.
#==============================================================================

class Window_Base < Window
  #--------------------------------------------------------------------------
  # * Draw Character Graphic
  #    character_name  : Character graphic filename
  #    character_index : Character graphic index
  #    x    : draw spot x-coordinate
  #    y    : draw spot y-coordinate
  #--------------------------------------------------------------------------
  def draw_character(character_name, character_index, x, y)
    return if character_name == nil
    bitmap = Cache.character(character_name)
    sign = character_name[/^[\!\$\=]./]
    if sign != nil and sign.include?('$')
      cw = bitmap.width / 3
      ch = bitmap.height / 4
      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)
    else
      if sign != nil and sign.include?('=')
        cw = bitmap.width
        ch = bitmap.height
        src_rect = Rect.new(1, 1, cw, ch)
        self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
      else
        cw = bitmap.width / 12
        ch = bitmap.height / 8
        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
  end
end


#==============================================================================
# ** Sprite_Character
#------------------------------------------------------------------------------
#  This sprite is used to display characters. It observes a instance of the
# Game_Character class and automatically changes sprite conditions.
#==============================================================================

class Sprite_Character < Sprite_Base
  def update_bitmap
    if @tile_id != @character.tile_id or
      @character_name != @character.character_name or
      @character_index != @character.character_index
      @tile_id = @character.tile_id
      @character_name = @character.character_name
      @character_index = @character.character_index
      if @tile_id > 0
        sx = (@tile_id / 128 % 2 * 8 + @tile_id % 8) * 32;
        sy = @tile_id % 256 / 8 % 16 * 32;
        self.bitmap = tileset_bitmap(@tile_id)
        self.src_rect.set(sx, sy, 32, 32)
        self.ox = 16
        self.oy = 32
      else
        self.bitmap = Cache.character(@character_name)
        sign = @character_name[/^[\!\$\=]./]
        if sign != nil and sign.include?('$')
          @cw = bitmap.width / 3
          @ch = bitmap.height / 4
        else
          if sign != nil and sign.include?('=')
            @cw = bitmap.width
            @ch = bitmap.height
          else
            @cw = bitmap.width / 12
            @ch = bitmap.height / 8
          end
        end
        self.ox = @cw / 2
        self.oy = @ch
      end
    end
  end
end

avatar
Yasan
Membre

Nombre de messages : 149
Age : 32
Distinction : aucune
Date d'inscription : 18/01/2011

Re: Evenements avec charsets simples

le Jeu 20 Jan 2011 - 19:05
Et il prendra combien de place graphiquement ? L'image entière est forcément plus grande mais ça ne prendra (réellement) qu'une case ?
avatar
dricc
Membre

Nombre de messages : 2753
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009

Re: Evenements avec charsets simples

le Jeu 20 Jan 2011 - 19:36
Si l'image prend plus d'un case , elle depassera et sera correctement affichée , aucuns problemes . Enfin sauf au niveau de la passabilité qu'il faut gérer soi-meme .
La case de l'evenement sera en fait en bas et horizontalement centrée .
avatar
Mist'
Staffeux retraité

Nombre de messages : 3298
Age : 25
Localisation : France // Auvergne // Cantal
Distinction : Ours Barbu é_è [/Shamu']
Artiste de talent [Yama']
Date d'inscription : 22/12/2007
http://www.rpgmakervx-fr.com

Re: Evenements avec charsets simples

le Jeu 20 Jan 2011 - 20:53
Sympathique comme script, merci Dricc Wink

_________________
avatar
dricc
Membre

Nombre de messages : 2753
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009

Re: Evenements avec charsets simples

le Mer 22 Fév 2012 - 11:20
J'ai voulu porter ce script sous VXAce et bonne nouvelle : ce script fonctionne tel quel sans la moindre modif !
avatar
mysterious
Membre

Nombre de messages : 400
Age : 28
Distinction : aucune
Date d'inscription : 24/07/2008

Re: Evenements avec charsets simples

le Mer 22 Fév 2012 - 12:26
Ah très intéressant ! cela peut amener un plus !

Merci du partage Smile
avatar
Naël
Membre

Nombre de messages : 558
Age : 21
Localisation : n.f. : repérage, dans l'espace ou dans le temps.
Distinction : aucune
Date d'inscription : 07/02/2010

Re: Evenements avec charsets simples

le Jeu 23 Fév 2012 - 19:26
Merci du partage, ça va vraiment éviter un pénible travail de découpage sur des décors qui apparaissent deux fois de tout le jeu !

Bravo à toi, et une fois de plus, merci !
avatar
dricc
Membre

Nombre de messages : 2753
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009

Re: Evenements avec charsets simples

le Ven 24 Fév 2012 - 11:51
bah oui , on a beau dire "c'est facile de redecouper soi meme" ... mais c'est long et ça consomme de la place disque .

D'ailleurs , j'ai l'intention d'aller plus loin :
- un format appelé +XXXX.png . ce sera une ligne par 3 colonne . utile pour les animations
- décalage du charset . histoire par exemple qu'une flamme se pose bien sur le flambeau sans qu'on ait besoin de faire 10 aller-retour sous paint.net pour changer la position .

Je fournis un exemple pour ce format =XXXXX.png :

vous verrez , vous pourrez mettre un personnage derriere le stand facilement (si il est de format rtp) .
avatar
LightNox
Membre

Nombre de messages : 1755
Age : 27
Localisation : Chez Moi ^^
Date d'inscription : 10/04/2008

Re: Evenements avec charsets simples

le Ven 24 Fév 2012 - 17:54
c'est vraiment bien ce script x)

merci du partage dricc toujours op Wink
avatar
Ssozi
Membre

Nombre de messages : 474
Age : 21
Distinction : Sojin nuna, salanghaeyo !
Date d'inscription : 24/07/2009
http://rpgmakertgs.tumblr.com/

Re: Evenements avec charsets simples

le Sam 1 Mar 2014 - 20:58
@dricc a écrit:Ca ne m'a pas pris plus d'un 1/4 d'heure Smile
C'est cool, et l'intérêt du script est là, mais pourquoi avoir totalement écrasé deux méthodes déjà existantes ?
Tu aurais pu le faire en 5min si tu étais passé par un alias, de cette façon :
Spoiler:

Code:
# image simples pour un evenement
# Auteur :dricc
# si vous créez un evenement et que vous lui associez une image appelée "=<nom que vous voulez>.png"
# ce script fera en sorte que l'image soit affichée en entier (et pas un petit morceau)

#==============================================================================
# ** Window_Base
#==============================================================================
class Window_Base < Window
  #--------------------------------------------------------------------------
  # * Draw Character Graphic
  #--------------------------------------------------------------------------
  alias draw_chara_b draw_character
  def draw_character(character_name, character_index, x, y)
    return if ! character_name
   bitmap = Cache.character(character_name)
    sign = character_name[/^[\!\$\=]./]
    if sign && sign.include?('=')
      cw = bitmap.width
      ch = bitmap.height
      src_rect = Rect.new(1, 1, cw, ch)
      self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
    else
      draw_chara_b(character_name, character_index, x, y)      
    end
  end
end

#==============================================================================
# ** Sprite_Character
#==============================================================================
class Sprite_Character < Sprite_Base
  alias set_chara_bmp_b set_character_bitmap
  def set_character_bitmap
    self.bitmap = Cache.character(@character_name)
    sign = @character_name[/^[\!\$]./]
    if sign && sign.include?('=')
      @cw = bitmap.width
      @ch = bitmap.height
    else
      set_chara_bmp_b
    end
  end
end

Il y a plus de chances pour que ça fonctionne avec d'autres scripts.
Bonne soirée ! Very Happy
Contenu sponsorisé

Re: Evenements avec charsets simples

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