FAMAS Index du Forum

FAMAS
Faction armée des makers assoiffés de sang

 FAQFAQ   RechercherRechercher   MembresMembres   GroupesGroupes   S’enregistrerS’enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Scroll Pictures
Aller à la page: 1, 2, 3  >
 
Poster un nouveau sujet   Répondre au sujet    FAMAS Index du Forum -> Section Corvées -> Stand de tir
Sujet précédent :: Sujet suivant  
Auteur Message
Anonyme
Vétéran


Inscrit le: 30 Juil 2011
Messages: 1 028

MessagePosté le: Jeu 3 Mai - 03:04 (2012)    Sujet du message: Scroll Pictures Répondre en citant

PublicitéSupprimer les publicités ?
Compatible XP, VX et VXace.
Ce script permet de rajouter quelques petits effets de la more aux maps pour les embellir (ça s'adresse à ceux qui ont plein de temps à perdre dans des détails).
Pour faire simple ce script permet d'afficher des images qui bouclent un peu à la manière des brouillards mais juste dans le cadre d'une image et avec la forme qu'on veut.
Pour ça on a besoin de deux choses, une image en noir et blanc qui servira de masque et une texture.

Plutôt que du blabla des exemples :
- Une lumière avec de la poussière qui flotte.

Le masque et la texture utilisés :


- Une fumée dans un couloir.

Le masque et la texture utilisés (texture que j'ai par ailleurs mis a 400% de zoom dans les réglages pour avoir cet effet) :


J'ai essayé de rendre ça le plus simple possible à configurer donc on va utiliser la commande Afficher une image.
Mais avant d'utiliser la commande on insère un script en écrivant : scroll_picture_mask
Comme ça les commandes qui suivent ne seront pas gérées comme étant des images normales.
Dans la commande Afficher une image on sélectionne l'image de masque, la position sur la map en pixels, etc... toutes les réglages seront pris en compte comme sur une image normale.
Ensuite pour configurer la texture on va réutiliser la commande Afficher une image mais cette fois avant on met un script avec : scroll_picture_texture
Cette fois on choisis l'image de texture mais les autres réglages auront un autre effet, la position X indiquera la vitesse de défilement sur X, la position Y la vitesse de défilement sur Y, le zoom ici est celui de la texture qui est indépendant du zoom de l'image elle même, les autres réglages ne sont pas utilisés.
Ce qui donne quelque chose comme ça :

Si on a besoin d'en configurer plusieurs d’affiler, on a pas besoin de faire :
<> Script : scroll_picture_mask
<> Afficher image : N°1 ...
<> Script : scroll_picture_mask
<> Afficher image : N°2 ...


On peut simplifier en :
<> Script : scroll_picture_mask
<> Afficher image : N°1 ...
<> Afficher image : N°2 ...


De même on peut aussi utiliser les commandes Déplacer une image, Faire tourner une image, Modifier le ton d'une image et Effacer une image.
Toutes les commandes liées aux images suivant directement scroll_picture_mask sont considéré comme telles.
Idem pour scroll_picture_texture

Enfin il y'a deux réglages supplémentaires qu'on ne peut faire qu'en script.

scroll_picture(id).z = valeur
Avec id le numéro de l'image et valeur la priorité de superposition, la valeur par défaut est 1000 ce qui correspond à Au dessus de tout, mais on peut mettre par exemple 1 pour que l'image soit juste au dessus du sol, ou un nombre négatif pour qu'elle apparaisse derrière la map.

scroll_picture(id).map_anchor = valeur
Avec id le numéro de l'image et valeur le rapport entre la position de l'image et la map, la valeur par défaut est 1 ce qui signifie que l'image bouge avec la map, à 0 l'image n'est pas fixée à la map, à 2 l'image bouge avec la map et deux fois plus vite, à 0.5 l'image bouge avec la map mais deux fois moins vite.

Le script, à mettre au dessus du main comme d'hab :
Code:
# Scroll Pictures 1.0 for XP, VX & VXAce by Zeus81

class Game_Scroll_Picture < Game_Picture
  attr_accessor :z, :map_anchor, :texture, :texture_ox, :texture_oy, :erased
  def initialize(number)
    @z  , @map_anchor, @texture                , @texture_ox, @texture_oy, @erased =
    1000, 1          , Game_Picture.new(number), 0          , 0          , false
    super(number)
  end
  def erase() @erased = true end
  def update
    super
    @texture.update
    @texture_ox -= @texture.x / 10.0
    @texture_oy -= @texture.y / 10.0
  end
end

class Sprite_Scroll_Picture < Sprite
  dll = FileTest.directory?('System') ? 'System/ZEUS' : 'ZEUS'
  GrayscaleMaskBlt = Win32API.new(dll, 'GrayscaleMaskBlt', 'iiiiiiiiii', 'i')
  def initialize(viewport, picture)
    super(viewport)
    @picture, @last_args = picture, []
  end
  def dispose
    bitmap.dispose if bitmap
    super
  end
  def update
    return unless self.visible = !@picture.name.empty? && !@picture.texture.name.empty?
    if @last_mask_name != @picture.name
      @last_mask_name = @picture.name.dup
      bitmap.dispose if bitmap
      mask = cache(@picture.name)
      self.bitmap = Bitmap.new(mask.width, mask.height)
    end
    if @picture.origin != 0
      self.ox = bitmap.width / 2
      self.oy = bitmap.height / 2
    else self.ox = self.oy = 0
    end
    self.x = @picture.x - @picture.map_anchor * map_display_x
    self.y = @picture.y - @picture.map_anchor * map_display_y
    self.z = @picture.z
    self.zoom_x = @picture.zoom_x / 100.0
    self.zoom_y = @picture.zoom_y / 100.0
    self.opacity = @picture.opacity
    self.blend_type = @picture.blend_type
    self.angle = @picture.angle
    self.tone = @picture.tone
    return unless self.visible = on_screen?
    super
    args = [bitmap.__id__ << 1, 0, cache(@picture.name).__id__ << 1, 0,
            cache(@picture.texture.name).__id__ << 1, 0,
            @picture.texture_ox.to_i, @picture.texture_oy.to_i,
            @picture.texture.zoom_x.to_i, @picture.texture.zoom_y.to_i]
    return if @last_args == args
    @last_args.replace(args)
    GrayscaleMaskBlt.call(*args)
  end
  def on_screen?
    x1, y1, w1, h1 = x, y, (bitmap.width*zoom_x).to_i, (bitmap.height*zoom_y).to_i
    w2, h2 = screen_width, screen_height
    if angle == 0
      x1, y1 = x1-w1/2, y1-h1/2 if ox != 0
      x1<w2 and x1+w1>0 and y1<h2 and y1+h1>0
    else
      x1, y1, r1 = (x1-w2/=2).abs, (y1-h2/=2).abs, Math.hypot(w1, h1)
      r1 /= 2 if ox != 0
      x1<=w2+r1 and y1<=h2+r1 and (x1<=w2 or y1<=h2 or Math.hypot(x1-w2,y1-h2)<=r1)
    end
  end
  if defined?(Hangup) #xp
    def cache(filename) RPG::Cache.picture(filename) end
    def screen_width()  640                          end
    def screen_height() 480                          end
    def map_display_x() $game_map.display_x / 4      end
    def map_display_y() $game_map.display_y / 4      end
  else                #vx & vxace
    def cache(filename) Cache.picture(filename)      end
    def screen_width()  Graphics.width               end
    def screen_height() Graphics.height              end
    if RUBY_VERSION == '1.8.1' #vx
      def map_display_x() $game_map.display_x / 8    end
      def map_display_y() $game_map.display_y / 8    end
    else                       #vxace
      def map_display_x() $game_map.display_x * 32   end
      def map_display_y() $game_map.display_y * 32   end
    end
  end
end

class Game_Map
  attr_reader :scroll_pictures
  alias zeus81_scroll_pictures_setup setup
  def setup(map_id)
    @scroll_pictures = {}
    zeus81_scroll_pictures_setup(map_id)
  end
  alias zeus81_scroll_pictures_update update
  def update(*args)
    @scroll_pictures.delete_if {|i, p| p.erased}
    @scroll_pictures.each_value {|p| p.update}
    zeus81_scroll_pictures_update(*args)
  end
end

class Spriteset_Map
  alias zeus81_scroll_pictures_dispose dispose
  def dispose
    @scroll_picture_sprites.each_value {|s| s.dispose}
    zeus81_scroll_pictures_dispose
  end
  alias zeus81_scroll_pictures_update update
  def update
    @scroll_picture_sprites ||= {}
    @scroll_picture_sprites.delete_if do |i, s|
      s.dispose if result = !$game_map.scroll_pictures.has_key?(i)
      result
    end
    for i, p in $game_map.scroll_pictures
      s = @scroll_picture_sprites[i] ||= Sprite_Scroll_Picture.new(@viewport1, p)
      s.update
    end
    zeus81_scroll_pictures_update
  end
end

if defined?(Hangup) #xp
 
  class Interpreter
    def execute_command
      if @index < @list.size-1
        @parameters = @list[@index].parameters
        method_name = "command_#{@list[@index].code}"
        return send(method_name) if respond_to?(method_name)
      else command_end
      end
      return true
    end
    def scroll_picture(id)
      $game_map.scroll_pictures[id] ||= Game_Scroll_Picture.new(id)
    end
    def scroll_picture_mask()    scroll_picture_setup(0) end
    def scroll_picture_texture() scroll_picture_setup(1) end
    def scroll_picture_setup(type)
      i = @index
      while(@list[i += 1].code.between?(231, 235))
        @list[i].parameters << type if @list[i].code < 233
        @list[i].code += 810000
      end
      return true
    end
    def command_810231
      picture = scroll_picture(@parameters[0])
      picture = picture.texture if @parameters[-1] != 0
      x, y = @parameters[4], @parameters[5]
      x, y = $game_variables[x], $game_variables[y] if @parameters[3] != 0
      picture.show(@parameters[1], @parameters[2], x, y, @parameters[6],
                   @parameters[7], @parameters[8], @parameters[9])
      return true
    end
    def command_810232
      picture = scroll_picture(@parameters[0])
      picture = picture.texture if @parameters[-1] != 0
      x, y = @parameters[4], @parameters[5]
      x, y = $game_variables[x], $game_variables[y] if @parameters[3] != 0
      picture.move(@parameters[1]*2, @parameters[2], x, y, @parameters[6],
                   @parameters[7], @parameters[8], @parameters[9])
      return true
    end
    def command_810233
      scroll_picture(@parameters[0]).rotate(@parameters[1])
      return true
    end
    def command_810234
      scroll_picture(@parameters[0]).start_tone_change(@parameters[1], @parameters[2]*2)
      return true
    end
    def command_810235
      id = @parameters[0]
      scroll_picture(id).erase if $game_map.scroll_pictures.has_key?(id)
      return true
    end
  end
 
else                #vx & vxace
 
  class Game_Interpreter
    if RUBY_VERSION == '1.8.1' #vx
      def wait(duration) @wait_count = duration end
      def execute_command
        if @index < @list.size-1
          @params, @indent = @list[@index].parameters, @list[@index].indent
          method_name = "command_#{@list[@index].code}"
          return send(method_name) if respond_to?(method_name)
        else command_end
        end
        return true
      end
    end
    def scroll_picture(id)
      $game_map.scroll_pictures[id] ||= Game_Scroll_Picture.new(id)
    end
    def scroll_picture_mask()    scroll_picture_setup(0) end
    def scroll_picture_texture() scroll_picture_setup(1) end
    def scroll_picture_setup(type)
      i = @index
      while(@list[i += 1].code.between?(231, 235))
        @list[i].parameters << type if @list[i].code < 233
        @list[i].code += 810000
      end
    end
    def command_810231
      picture = scroll_picture(@params[0])
      picture = picture.texture if @params[-1] != 0
      x, y = @params[4], @params[5]
      x, y = $game_variables[x], $game_variables[y] if @params[3] != 0
      picture.show(@params[1], @params[2], x, y, @params[6],
                   @params[7], @params[8], @params[9])
      return true
    end
    def command_810232
      picture = scroll_picture(@params[0])
      picture = picture.texture if @params[-1] != 0
      x, y = @params[4], @params[5]
      x, y = $game_variables[x], $game_variables[y] if @params[3] != 0
      picture.move(@params[2], x, y, @params[6], @params[7],
                   @params[8], @params[9], @params[10])
      wait(@params[10]) if @params[11]
      return true
    end
    def command_810233
      scroll_picture(@params[0]).rotate(@params[1])
      return true
    end
    def command_810234
      scroll_picture(@params[0]).start_tone_change(@params[1], @params[2])
      wait(@params[2]) if @params[3]
      return true
    end
    def command_810235
      id = @params[0]
      scroll_picture(id).erase if $game_map.scroll_pictures.has_key?(id)
      return true
    end
  end
 
end


La dll, à mettre direct dans le dossier du jeu sauf pour VXace où il faut mettre ça dans le sous-dossier System :
http://www.mediafire.com/?1g4shddbhh1qh
Y'a aussi le code source pour ceux que ça intéresse, c'est un projet VC++2010 Express.

Pour les scripteurs y'a d'autres possibilités avec la fonction GrayscaleMaskBlt qui ne sont pas exploitées dans ce scripts.
Code:
GrayscaleMaskBlt .call(
    bitmap.__id__<<1, #Le bitmap dans lequel on veut dessiner
    bitmap_rect.__id__<<1, #Rect de la zone à remplir, si c'est tout le bitmap on peut mettre 0
    mask.__id__<<1, #(Facultatif) Bitmap d'un masque en niveau de gris à appliquer au remplissage, si la taille du masque est différente de celle du bitmap il est automatiquement étiré
    mask_rect.__id__<<1, #Rect de la zone du masque qu'on désire utiliser, si c'est tout le bitmap on peut mettre 0
    texture.__id__<<1, #Bitmap de la texture à dessiner
    texture_rect.__id__<<1, #Rect du morceau de texture à dessiner, si c'est tout le bitmap on peut mettre 0
    texture_ox, #Le décalage en pixels de la texture sur x
    texture_oy, #Le décalage en pixels de la texture sur y
    texture_zoom_x, #L'étirement de la texture sur x, défaut 100, ne peut pas être égal à 0, si négatif la texture est inversée sur x
    texture_zoom_y #L'étirement de la texture sur y, défaut 100, ne peut pas être égal à 0, si négatif la texture est inversée sur y
)


La fonction retourne aussi un message, 0 = pas d'erreur, 1 = zoom invalide, 2 = rect invalide


Dernière édition par Anonyme le Jeu 24 Mai - 17:42 (2012); édité 3 fois
Revenir en haut
Anonyme
Vétéran


Inscrit le: 30 Juil 2011
Messages: 1 028

MessagePosté le: Jeu 3 Mai - 15:33 (2012)    Sujet du message: Scroll Pictures Répondre en citant

:ToT
trotter j'ai besoin de toi, je crois me souvenir que ton pc est une bouse intergalactique, ça fera une bonne référence.
Revenir en haut
sriden
Administrateur


Inscrit le: 22 Juil 2011
Messages: 14 602

MessagePosté le: Jeu 3 Mai - 15:39 (2012)    Sujet du message: Scroll Pictures Répondre en citant

:croa

Y'a que toi qui a RMXP dans le coin. :--
(Enfin non, y''a aussi Suisse comme hérétique, mais il passe une fois tous les 35 du mois.)
Revenir en haut
Anonyme
Vétéran


Inscrit le: 30 Juil 2011
Messages: 1 028

MessagePosté le: Jeu 3 Mai - 15:56 (2012)    Sujet du message: Scroll Pictures Répondre en citant

C'est un projet VX Ace et y'a pas besoin du logiciel (même si ça serait mieux pour pouvoir modifier et évaluer la limite).
Revenir en haut
trotter
Vétéran


Inscrit le: 26 Juil 2011
Messages: 6 771

MessagePosté le: Jeu 3 Mai - 18:21 (2012)    Sujet du message: Scroll Pictures Répondre en citant

J'ai changé de PC mais j'ai encore l'ancien qui traine, je regarderais.
Revenir en haut
Cygn



Inscrit le: 30 Jan 2012
Messages: 202

MessagePosté le: Jeu 3 Mai - 19:16 (2012)    Sujet du message: Scroll Pictures Répondre en citant

Unable to find VL Gothic font.
Apparemment les versions que j'ai, ça lui plait pas.
Revenir en haut
Roi of the Suisse
Vétéran


Inscrit le: 27 Juil 2011
Messages: 7 826

MessagePosté le: Jeu 3 Mai - 21:35 (2012)    Sujet du message: Scroll Pictures Répondre en citant

sriden a écrit:
(Enfin non, y''a aussi Suisse comme hérétique, mais il passe une fois tous les 35 du mois.)
Spa vrai je viens au moins une fois par semaine :fgr

Je DL, mon PC portable est pas très puissant, je teste.


EDIT: Pareil que Kitsch, pourquoi t'utilises pas du Comic san MS comme tout le monde ? :fgr
Revenir en haut
Visiter le site web du posteur
Amalrich Von Monesser
Vétéran


Inscrit le: 26 Juil 2011
Messages: 1 191

MessagePosté le: Jeu 3 Mai - 21:49 (2012)    Sujet du message: Scroll Pictures Répondre en citant

Je l'ai même pas, cette police idiote.

Visiblement ces andouilles d'enteurbrayne distribuent la police avec les reuteupeuh de ace et elle n'est effectivement pas dans windows.
J'ai la flemme de DL lesdites RTP ou de chercher la police seule.
Revenir en haut
Anonyme
Vétéran


Inscrit le: 30 Juil 2011
Messages: 1 028

MessagePosté le: Ven 4 Mai - 02:26 (2012)    Sujet du message: Scroll Pictures Répondre en citant

C'est pas de ma faute c'est la crise.
J'ai réup en incluant la police que de toute façon je n'utilise pas mais vxa ne cherche pas à comprendre il la veut et pis c'est tout.
http://www.mediafire.com/?fghr7d82abs0a42
:ToT
Revenir en haut
Anonyme
Vétéran


Inscrit le: 30 Juil 2011
Messages: 1 028

MessagePosté le: Ven 4 Mai - 20:49 (2012)    Sujet du message: Scroll Pictures Répondre en citant

:ToT
Revenir en haut
Roi of the Suisse
Vétéran


Inscrit le: 27 Juil 2011
Messages: 7 826

MessagePosté le: Ven 4 Mai - 21:52 (2012)    Sujet du message: Scroll Pictures Répondre en citant

Impossible gnagnagna MSVCR100.dll manquant blablabla
Script error runtime line 10 library : zeus

:popcorn
Revenir en haut
Visiter le site web du posteur
trotter
Vétéran


Inscrit le: 26 Juil 2011
Messages: 6 771

MessagePosté le: Ven 4 Mai - 22:01 (2012)    Sujet du message: Scroll Pictures Répondre en citant

:popcorn :popcorn
Revenir en haut
Anonyme
Vétéran


Inscrit le: 30 Juil 2011
Messages: 1 028

MessagePosté le: Ven 4 Mai - 22:18 (2012)    Sujet du message: Scroll Pictures Répondre en citant

Ah ça c'est une information importante, je vais voir ça. :F
Revenir en haut
Cygn



Inscrit le: 30 Jan 2012
Messages: 202

MessagePosté le: Ven 4 Mai - 22:20 (2012)    Sujet du message: Scroll Pictures Répondre en citant

Tout fonctionne chez moi.
C'est quoi l'étape d'après ?

Si ça peut t'aider, j'ai VX Ace d'installé.

Bon en fait on a testé avec Roi et Idole, c'est fluide, même avec un PC pourri et un live en cours.
J'ai modifié les valeurs de déplacement, même si à mon avis c'est pas ça qui va changer grand chose, ça fait des trucs dégueu mais à +/- 400 le déplacement, c'est un peu normal.

Après j'ai pas touché à la taille de l'écran. Je n'ai aucune idée de ce qui peut faire ramer.
Revenir en haut
Anonyme
Vétéran


Inscrit le: 30 Juil 2011
Messages: 1 028

MessagePosté le: Sam 5 Mai - 00:48 (2012)    Sujet du message: Scroll Pictures Répondre en citant

Oui voilà c'est pour tester les perfs, tu peux augmenter la taille du bitmap pour voir jusqu'où tu peux aller.

http://www.mediafire.com/?086xb6zu5n6d87x
Maintenant ça devrait marcher chez toi saucisse (normalement). :fgr
Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 22:18 (2017)    Sujet du message: Scroll Pictures

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    FAMAS Index du Forum -> Section Corvées -> Stand de tir Toutes les heures sont au format GMT + 1 Heure
Aller à la page: 1, 2, 3  >
Page 1 sur 3

 
Sauter vers:  

Index | creer un forum gratuit | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com