Partagez
Aller en bas
avatar
Berka
Administrateur

Nombre de messages : 1831
Age : 28
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

Brouillard de Guerre

le Sam 23 Mai 2009 - 12:13
Bonjour à tous !

Voici un tout nouveau script qui ajoute un brouillard de guerre sur vos cartes. Vous voyez Age Of Empires ? C'est le meme principe: tout endroit non découvert est noirci, laissant encore plus de suspens à votre partie.

Le principe est très simple:
un rayon est défini: c'est le champ de vision du héro.
les données visitées sont sauvegardée d'une carte à l'autre.
le brouillard peut etre masqué par l'activation d'un interrupteur (1 par défaut). Activé: brouillard masqué, Désactivé: brouillard Affiché.
il peut etre réinitialisé.

Attention, ce script entraine une chute de 5 FPS pour les grandes maps.

Voila tout, voici le tileset à placer dans votre projet, dossier System. Un grand merci à Jess qui me l'a rendu transparent. A nommer "fog.png"
Choisissez parmi plusieurs:
Spoiler:




Et le script qui doit etre placé au dessus de main:

Code:
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#                        Brouillard de Guerre                    22/05/09 
#-------------------------------------------------------------------------------
#      ver.0.1                  par Berka                      rgss.2       
#                      http://www.rpgmakervx-fr.com                         
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#                Ajoute un brouillard de guerre sur la Carte                 
#-------------------------------------------------------------------------------
#  Commandes:                                                                 
#  Fog.clear_fog(map_id)          # réinitialise le brouillard (tout noir)   
#  vu_par_hero?(x,y)              # vérifie si [x,y] est vu par le héro     
#  $RayonFog = i                  # modifier le champ de vision du héro     
#-------------------------------------------------------------------------------
#  Fonctions:                                                                 
#  * Activation d'interrupteur pour masquer le brouillard                   
#  * Sauvegarde du brouillard de chaque carte                               
#  * Affichage des bordures de brouillard en parallèle (Thread)             
#  Ne pas utiliser sur de trop grandes cartes, risque de chute de fps !     
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

module Berka
  module Brouillard
    $RayonFog  = 3          # Rayon de vision: calcul optimisé pour 3 & 6
    FichFog    = "fog.png"  # Fichier de tileset brouillard: seule la 1ere pose est utilisée
                            #  doit se trouver dans le dossier systeme de projet
    IDFog      = 1          # Id de l'interrupteur qui désactive/active le brouillard
    ZFog      = 300        # Priorité de superposition du brouillard.         
    Act_GC    = true        # Activation du Ramasse Miettes pour gain de performances
   
                # Ne pas changer !!!!
    Tiles={                # Indexation des autotiles de brouillard
      "0"=>2816,"1"=>2824,"12"=>2844,"123"=>2844,"1234"=>2856,"12346"=>2860,
      "123467"=>2860,"1234678"=>2862,"12346789"=>2862,"1234679"=>2860,"123468"=>2862,
      "1234689"=>2862,"123469"=>2860,"12347"=>2856,"123478"=>2859,"1234789"=>2859,
      "123479"=>2857,"12348"=>2859,"123489"=>2859,"12349"=>2857,"1236"=>2854,
      "12367"=>2855,"123678"=>2861,"123679"=>2855,"1236789"=>2861,"12368"=>2861,
      "123689"=>2861,"12369"=>2854,"1237"=>2845,"12378"=>2849,"123789"=>2849,
      "12379"=>2847,"1238"=>2849,"12389"=>2849,"1239"=>2846,"124"=>2856,"1246"=>2860,
      "12467"=>2860,"124678"=>2862,"1246789"=>2862,"124679"=>2860,"12468"=>2862,
      "124689"=>2862,"12469"=>2860,"1247"=>2856,"12478"=>2859,"124789"=>2859,
      "12479"=>2857,"1248"=>2859,"12489"=>2859,"1249"=>2857,"126"=>2854,"1267"=>2855,
      "12678"=>2861,"126789"=>2861,"12679"=>2855,"1268"=>2861,"12689"=>2861,"1269"=>2854,
      "127"=>2845,"1278"=>2849,"12789"=>2849,"128"=>2849,"1289"=>2849,"129"=>2846,
      "13"=>2828,"134"=>2834,"1346"=>2848,"13467"=>2848,"134678"=>2858,"1346789"=>2858,
      "134679"=>2848,"13468"=>2858,"134689"=>2858,"13469"=>2848,"1347"=>2834,
      "13478"=>2851,"134789"=>2851,"13479"=>2835,"1348"=>2851,"13489"=>2851,
      "1349"=>2835,"136"=>2841,"1367"=>2843,"13678"=>2853,"136789"=>2853,"13679"=>2843,
      "1368"=>2853,"13689"=>2853,"1369"=>2841,"137"=>2829,"1378"=>2839,"13789"=>2839,
      "138"=>2839,"1389"=>2839,"139"=>2830,"14"=>2832,"146"=>2848,"1467"=>2848,
      "14678"=>2858,"146789"=>2858,"14679"=>2848,"1468"=>2862,"14689"=>2858,"1469"=>2848,
      "147"=>2832,"1478"=>2850,"14789"=>2850,"1479"=>2833,"148"=>2850,"1489"=>2850,
      "149"=>2833,"16"=>2841,"167"=>2843,"1678"=>2853,"16789"=>2853,"1679"=>2848,
      "168"=>2853,"1689"=>2853,"169"=>2841,"17"=>2825,"178"=>2838,"1789"=>2838,
      "179"=>2827,"18"=>2838,"189"=>2838,"19"=>2826,"2"=>2844,"23"=>2844,"234"=>2856,
      "2346"=>2860,"23467"=>2860,"234678"=>2862,"2346789"=>2862,"234679"=>2862,
      "23468"=>2862,"234689"=>2862,"23469"=>2860,"2347"=>2856,"23478"=>2859,
      "234789"=>2859,"23479"=>2857,"2348"=>2859,"23489"=>2859,"2348"=>2859,"236"=>2854,
      "2367"=>2855,"23678"=>2861,"236789"=>2861,"23679"=>2855,"2368"=>2861,"23689"=>2861,
      "2369"=>2854,"237"=>2845,"2378"=>2849,"23789"=>2849,"2379"=>2847,"238"=>2849,
      "2389"=>2849,"239"=>2846,"24"=>2856,"246"=>2860,"2467"=>2860,"24678"=>2862,
      "246789"=>2862,"24679"=>2860,"2468"=>2862,"24689"=>2862,"2469"=>2860,"247"=>2856,
      "2478"=>2859,"24789"=>2859,"2479"=>2847,"248"=>2859,"2489"=>2859,"249"=>2857,
      "26"=>2854,"267"=>2854,"2678"=>2861,"26789"=>2861,"2679"=>2855,"268"=>2861,
      "2689"=>2861,"269"=>2854,"27"=>2845,"278"=>2849,"2789"=>2849,"279"=>2847,"28"=>2849,
      "289"=>2849,"29"=>2846,"3"=>2820,"34"=>2834,"346"=>2848,"3467"=>2848,"34678"=>2858,
      "346789"=>2858,"34679"=>2848,"3468"=>2858,"34689"=>2858,"3469"=>2848,"347"=>2834,
      "3478"=>2851,"34789"=>2851,"3479"=>2835,"348"=>2851,"3489"=>2851,"349"=>2835,
      "36"=>2840,"367"=>2842,"3678"=>2852,"36789"=>2852,"3679"=>2842,"368"=>2852,
      "3689"=>2852,"369"=>2840,"37"=>2821,"378"=>2837,"3789"=>2837,"379"=>2823,
      "38"=>2837,"389"=>2837,"39"=>2822,"4"=>2832,"46"=>2848,"467"=>2848,"4678"=>2858,
      "46789"=>2858,"4679"=>2848,"468"=>2858,"4689"=>2858,"469"=>2848,"47"=>2832,
      "478"=>2850,"4789"=>2850,"479"=>2833,"48"=>2850,"489"=>2850,"49"=>2833,
      "6"=>2840,"67"=>2842,"678"=>2852,"6789"=>2852,"679"=>2842,"68"=>2852,
      "689"=>2852,"69"=>2840,"7"=>2817,"78"=>2836,"789"=>2836,"79"=>2819,"8"=>2836,
      "89"=>2836,"9"=>2818 
    } # et tu payes ton mal de crâne, pour trouver chaque valeur ^^
  end
end
module Fog
  def self.clear_fog(id)
    $game_temp.br_maps.delete(id)
    return if !$scene.is_a?(Scene_Map)
    $scene.spriteset.dispose
    $scene.spriteset=Spriteset_Map.new
  end
end
Win32API.new('kernel32','SetPriorityClass','pi','i').call(
Win32API.new('kernel32','GetCurrentProcess','','i').call,256)
include Berka::Brouillard
class Spriteset_Map
  alias :br_create      :create_tilemap
  alias :br_dispose    :dispose_tilemap
  alias :br_view        :dispose_viewports
  alias :br_update      :update_tilemap    unless $@
  alias :br_view_update :update_viewports  unless $@
  attr_accessor :br_tile,:tilemap
  def create_tilemap
    br_create
    @br_tile=Tilemap.new(@br_view=Viewport.new(0,0,Graphics.width,Graphics.height))
    @br_view.z=ZFog
    8.times{|i|@br_tile.bitmaps[i]=@tilemap.bitmaps[i].clone}
    @br_tile.bitmaps[1]=Cache.system(FichFog)
    @br_tile.map_data=Table.new($game_map.width,$game_map.height,3)
    clear_fog
  end
  def clear_fog
    w,h=$game_map.width,$game_map.height
    if $game_temp.br_maps.has_key?($game_map.map_id)
      for x in 0...w;for y in 0...h
        if $game_temp.br_maps[$game_map.map_id][x,y]==0
          @br_tile.map_data[x,y,1]=2816
          a||=true
        else
          @br_tile.map_data[x,y,1]=0
          a||=false
        end
      end;end
      if a
        Thread.new{for x in 0...w;for y in 0...h
          chk(x,y)
        end;end}
      end
    else
      $game_temp.br_maps[$game_map.map_id]||=Table.new(w,h)
      for x in 0...w;for y in 0...h
        @br_tile.map_data[x,y,1]=2816
        $game_temp.br_maps[$game_map.map_id][x,y]=0
      end;end
    end
  end
  def dispose_tilemap
    br_dispose
    @br_tile.dispose
  end
  def dispose_viewports
    br_view
    @br_view.dispose
  end
  def update_tilemap
    br_update
    if $game_switches[IDFog]
      @br_tile.dispose
      return
    end
    GC.start if !$game_player.moving?&&Act_GC
    return if !$game_temp.br_maps.has_key?($game_map.map_id)
    br_obscurcis
    x,y=$game_map.display_x/8,$game_map.display_y/8
    return if x==@br_tile.ox&&y==@br_tile.oy
    @br_tile.ox,@br_tile.oy=x,y
    @br_tile.update
  end
  def br_obscurcis
    x,y=$game_player.x,$game_player.y
    rx,ry=(x-$RayonFog-2..x+$RayonFog+2).to_a,(y-$RayonFog-2..y+$RayonFog+2).to_a
    for tx in rx
      for ty in ry
        r=Math.sqrt(((x-tx)**2+(y-ty)**2))
        chk(tx,ty)if r.between?($RayonFog,$RayonFog+2)
        next if !tx.between?(rx[0],rx[-1])
        if r<=$RayonFog
          @br_tile.map_data[tx,ty,1]=0
          $game_temp.br_maps[$game_map.map_id][tx,ty]=1
        end
      end
    end
  end
  def chk(x,y)
    return if !$game_temp.br_maps.has_key?($game_map.map_id)||x.nil?||y.nil?||
      $game_temp.br_maps[$game_map.map_id][x,y]==1
    d=@br_tile.map_data
    l=[]
    l<<1 if d[x-1,y+1,1]==0
    l<<2 if d[x,y+1,1]==0
    l<<3 if d[x+1,y+1,1]==0
    l<<4 if d[x-1,y,1]==0
    l<<6 if d[x+1,y,1]==0
    l<<9 if d[x+1,y-1,1]==0
    l<<8 if d[x,y-1,1]==0
    l<<7 if d[x-1,y-1,1]==0
    l=l.sort.join
    return if l.nil?||l==""
    @br_tile.map_data[x,y,1]=Tiles[l]
  end
  def update_viewports
    br_view_update
    @br_view.update
  end
end
class Game_Temp
  alias :br_initialize :initialize
  attr_accessor :br_maps
  def initialize
    br_initialize
    @br_maps={}
  end
end
def vu_par_hero?(x,y)
  Math.sqrt((($game_player.x-x)**2+($game_player.y-y)**2))<=$RayonFog
end
class Scene_Map<Scene_Base # correctif: màj spriteset 1/frame
  attr_accessor :spriteset
  def update_basic
    Graphics.update               
    Input.update             
    $game_map.update           
  end
end
class Scene_File<Scene_Base
  alias :br_write_save :write_save_data
  alias :br_read_save  :read_save_data
  def write_save_data(file)
    br_write_save(file)
    Marshal.dump($game_temp.br_maps,file)
  end
  def read_save_data(file)
    br_read_save(file)
    $game_temp.br_maps=Marshal.load(file)
  end
end


En espérant qu'il trouvera preneur,

berka


Dernière édition par berka le Sam 23 Mai 2009 - 13:57, édité 1 fois
avatar
Jess
Staffeux retraité

Nombre de messages : 855
Age : 27
Localisation : Ma drums ou mon ordi !
Distinction : Dieu de Kipatord


Date d'inscription : 04/05/2008

Re: Brouillard de Guerre

le Sam 23 Mai 2009 - 12:23
Ha ouais c'est vraiment bien comme script, j'en aurais besoin pour ma map monde déjà !

Je vois que mon petit fog est pas mal finalement. Après c'est quelques chose de facile à modier. En tout cas super rendu. Beaucoup de script servent à faire un brouillard... mais là c'est vraiment super. Parfait.

Merci Berka !
avatar
Spider
Membre

Nombre de messages : 36
Age : 25
Distinction : aucune
Date d'inscription : 10/05/2009

Re: Brouillard de Guerre

le Sam 23 Mai 2009 - 12:38
C'est plutot cool !
Mais n'y aurait-il pas un moyen de faire ce brouillard plus smooth ?
Car lacordurre case par ccase n'est pas très esthétique.
avatar
Himitsu
Membre

Nombre de messages : 119
Distinction : aucune
Date d'inscription : 22/11/2008

Re: Brouillard de Guerre

le Sam 23 Mai 2009 - 12:44
Oui, très original comme script, il y aura surement plus d'une personne intéressée à mon avis.

Jolie travail Berka Wink
avatar
Berka
Administrateur

Nombre de messages : 1831
Age : 28
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

Re: Brouillard de Guerre

le Sam 23 Mai 2009 - 12:48
Jess: Merci
Spider: t'as mis des gants pour taper ton message ? Laughing Il faut que tu redessines le tileset de brouillard.
Himitsu: Merci aussi ^^

berka
avatar
Jess
Staffeux retraité

Nombre de messages : 855
Age : 27
Localisation : Ma drums ou mon ordi !
Distinction : Dieu de Kipatord


Date d'inscription : 04/05/2008

Re: Brouillard de Guerre

le Sam 23 Mai 2009 - 13:52
Y a pas de quoi Berka, c'est normal. Wink

Alors, pour ceux qui veulent d'autres fog, j'en ai créé trois nouveaux. Si ça plait j'en ferais d'autre. N'hésitez pas non plus à demander et je verrais ce que je peut faire.

Screen :





Les planches : toujours à nommer "fog.png", dossier "system"



avatar
Berka
Administrateur

Nombre de messages : 1831
Age : 28
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

Re: Brouillard de Guerre

le Sam 23 Mai 2009 - 13:55
Waw ! merci beaucoup !

Je les rajoute !
avatar
Jess
Staffeux retraité

Nombre de messages : 855
Age : 27
Localisation : Ma drums ou mon ordi !
Distinction : Dieu de Kipatord


Date d'inscription : 04/05/2008

Re: Brouillard de Guerre

le Sam 23 Mai 2009 - 14:01
Yeah ça gère. Cool

DERIENT ! ! ! Very Happy

J'en fais d'autre de temps en temps quand je suis inspiré, alors si vous avez des idées...
avatar
©SD-Arius
Membre

Nombre de messages : 495
Age : 42
Localisation : Khelonys...
Distinction :
Graphiste surdoué
Pieuvre multi-fonctions
Créateur hyperactif

Date d'inscription : 03/03/2008
http://www.sd-arius.over-blogcom/

Re: Brouillard de Guerre

le Sam 23 Mai 2009 - 19:07
Vraiment sympa ce script ^^
Il me rapelera les heures passées sur SO "till the end of time"
avatar
kordarr
Modérateur

Nombre de messages : 1838
Age : 28
Localisation : île de la réunion, Le Tampon.
Distinction : Auto-proclamé sex-symbol de la commu'
Frère jumeau de Jonathan ( Secret Story )
Exhibitionniste en herbe
[Mist' & Coco' Smile]
Fan n°1 de Coco'
Psychopathe en chef
Date d'inscription : 05/11/2008

Re: Brouillard de Guerre

le Sam 23 Mai 2009 - 19:44
Ah ouai mais ça déchire carrément tout ça...Je ne doute pas que ça puisse devenir un script incontournable...

Bravo à toi berka (encore) et gg jess j'aime bien tes brouillards.
avatar
yakzawik
Staffeux retraité

Nombre de messages : 1845
Age : 27
Localisation : Dans un trou perdu avec ma copine !
Distinction : Yakzawiki, l'encyclopédie libre !
[Elisa']
Force Zinzoline au fond de son coeur
Il est TROPDARKMECHAN
[Coco' ]
Date d'inscription : 31/05/2008

Re: Brouillard de Guerre

le Sam 23 Mai 2009 - 20:44
Ses brouillards sont des titles d'herbe pour le dernier : Bien trouvé mon cher Jess :P

Ensuite : C'est un bon script je trouve, bien que la chute de 5 FPS est embêtante. Je pense que j'y trouverai peut être son intérêt, finalement ^^
avatar
Jess
Staffeux retraité

Nombre de messages : 855
Age : 27
Localisation : Ma drums ou mon ordi !
Distinction : Dieu de Kipatord


Date d'inscription : 04/05/2008

Re: Brouillard de Guerre

le Sam 23 Mai 2009 - 20:58
J'ai pensais la même quand j'ai vu le script. Vraiment super, incontournable c'est le mot. Oui deux des brouillard sont des herbes. Very Happy
Ensuite les deux c'est du pixelage gradué transparents, un rond et un carré.
avatar
Berka
Administrateur

Nombre de messages : 1831
Age : 28
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

Re: Brouillard de Guerre

le Sam 23 Mai 2009 - 21:43
Ouaip, je sais vraiment pas quoi faire pour eviter la chute de FPS...
J'ai réduit le rafraichissement avec juste la zone+1 a chaque frame
J'ai mis les calculs de bordure en Thread (donc en parallèle)
J'ai simplifié les boucles...

Je regarde encore !

berka
avatar
wilkyo
Membre

Nombre de messages : 316
Age : 27
Localisation : Loiret
Distinction : Sauveur de miches // Chou (l)

[Coco' Smile]

Adepte de Pedobear // Lécheur de lolis

[Mist' Wink]

Personnage Colorée // Instructeur de boulet

[Wax Rolling Eyes]
Date d'inscription : 01/09/2008
http://www.wilkyo.com

Re: Brouillard de Guerre

le Dim 24 Mai 2009 - 10:15
Le script a l'air intéressant... Et même super, comme l'ont déjà dit les autres.

Mais au moment ou j'ai testé (sur un projet vierge), tout mon pc a planté.
La souris ne bougeait plus (en fait, elle avait disparu).
Quand je faisais alt+tab, normalement, ça change de fenêtre, et bah là non.
Et même en appuyant sur le bouton de l'ordi moins de 5 secondes, il ne s'éteignait pas... Alors que normalement, c'est comme faire démarrer/Arrêter
J'ai donc dû éteindre manuellement (+ de 5 secondes sur le bouton...)

Je ne sais pas si ça vient du script, mais il y a des chances.
J'ai juste eu le temps de voir le brouillard se mettre en place.

Est-ce qu'il y a une limite dans la taille de la map ?
Car la mienne faisait 100 par 100.

Et si vous me demandez: oui, j'ai mis l'image fog dans le dossier system.
Aucune erreur mais juste un plantage.

Voila. Merci.

Désolé de vous déranger...
avatar
Berka
Administrateur

Nombre de messages : 1831
Age : 28
Localisation : Paris
Distinction : rubyste déglingué
9ème dan en scripting-no-jutsu

Nouveau Justine Beber ;P
Date d'inscription : 16/12/2007
http://rpgruby.olympe-network.com

Re: Brouillard de Guerre

le Dim 24 Mai 2009 - 18:11
Bizarre... essaye en enlevant ces deux lignes du script:

Code:
Win32API.new('kernel32','SetPriorityClass','pi','i').call(
Win32API.new('kernel32','GetCurrentProcess','','i').call,256)

berka
avatar
wilkyo
Membre

Nombre de messages : 316
Age : 27
Localisation : Loiret
Distinction : Sauveur de miches // Chou (l)

[Coco' Smile]

Adepte de Pedobear // Lécheur de lolis

[Mist' Wink]

Personnage Colorée // Instructeur de boulet

[Wax Rolling Eyes]
Date d'inscription : 01/09/2008
http://www.wilkyo.com

Re: Brouillard de Guerre

le Dim 24 Mai 2009 - 19:22
Yeah ! J'ai fait précédent après avoir tapé un long message -_-"

Bon, pour résumer:
- Merci, ça marche nickel.
- Pourquoi ces deux lignes faisaient tout planter chez moi ?
- Je peux pas te rajouter dans mes crédits à moins de les personnaliser, comme un vrai jeu, car tu y est déjà.

Voila.
avatar
Skatino
Membre

Nombre de messages : 9
Age : 22
Localisation : Saint-Petersbourg, Russia
Distinction : aucune
Date d'inscription : 20/07/2013
http://chroniclesofmasdes.jimdo.com/

Re: Brouillard de Guerre

le Dim 4 Sep 2016 - 15:56
Hello, j'ai une erreur ligne 187 moi.
Dommage ça m’intéressait énormément...
Contenu sponsorisé

Re: Brouillard de Guerre

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