- driccMembre
- Nombre de messages : 2760
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009
Evenements avec charsets simples
Jeu 20 Jan 2011 - 19:03
J'ai un peu de mal à expliquer ce que fait ce script , j'avoue 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
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
- 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
- YasanMembre
- Nombre de messages : 149
Age : 39
Distinction : aucune
Date d'inscription : 18/01/2011
Re: Evenements avec charsets simples
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 ?
- driccMembre
- Nombre de messages : 2760
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009
Re: Evenements avec charsets simples
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 .
La case de l'evenement sera en fait en bas et horizontalement centrée .
- driccMembre
- Nombre de messages : 2760
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009
Re: Evenements avec charsets simples
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 !
- mysteriousMembre
- Nombre de messages : 400
Age : 35
Distinction : aucune
Date d'inscription : 24/07/2008
Re: Evenements avec charsets simples
Mer 22 Fév 2012 - 12:26
Ah très intéressant ! cela peut amener un plus !
Merci du partage
Merci du partage
- NaëlMembre
- Nombre de messages : 558
Age : 28
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
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 !
Bravo à toi, et une fois de plus, merci !
- driccMembre
- Nombre de messages : 2760
Localisation : Lille
Distinction : Altruiste - Incarnation de la Patience [Mist']
Date d'inscription : 10/08/2009
Re: Evenements avec charsets simples
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) .
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) .
- LightNoxMembre
- Nombre de messages : 1759
Age : 34
Localisation : Chez Moi ^^
Date d'inscription : 10/04/2008
Re: Evenements avec charsets simples
Ven 24 Fév 2012 - 17:54
c'est vraiment bien ce script x)
merci du partage dricc toujours op
merci du partage dricc toujours op
- InvitéInvité
Re: Evenements avec charsets simples
Sam 1 Mar 2014 - 20:58
C'est cool, et l'intérêt du script est là, mais pourquoi avoir totalement écrasé deux méthodes déjà existantes ?dricc a écrit:Ca ne m'a pas pris plus d'un 1/4 d'heure
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 !
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum