Accueil du SiteAccueil du Site  AccueilAccueil  Dernières imagesDernières images  RechercherRechercher  ConnexionConnexion  S'enregistrerS'enregistrer  



Le Deal du moment : -19%
PC portable MSI Gaming Pulse 16” -Ultra7 155H ...
Voir le deal
1299 €

Partagez
 

 [VX] Brouillard de guerre

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Elekami
Fondateur
Fondateur
Elekami

Masculin
Messages postés : 19071
Date d'inscription : 19/07/2008
Jauge LPC :
[VX] Brouillard de guerre 8915271400100 / 100100 / 100[VX] Brouillard de guerre 8915271400

[VX] Brouillard de guerre Pater_10
[VX] Brouillard de guerre Staffe10
[VX] Brouillard de guerre Mythe_10
[VX] Brouillard de guerre Membre11
[VX] Brouillard de guerre Doyen10
[VX] Brouillard de guerre Scanar10
[VX] Brouillard de guerre Compos10
[VX] Brouillard de guerre Testeu10
[VX] Brouillard de guerre Membre15
[VX] Brouillard de guerre Partag10
[VX] Brouillard de guerre Projet10
[VX] Brouillard de guerre Projet16
[VX] Brouillard de guerre Riche_10
[VX] Brouillard de guerre Travai10
[VX] Brouillard de guerre Collec10
[VX] Brouillard de guerre Collec11
[VX] Brouillard de guerre Collec12
[VX] Brouillard de guerre Collec13
[VX] Brouillard de guerre Connar10


[VX] Brouillard de guerre Empty
MessageSujet: [VX] Brouillard de guerre   [VX] Brouillard de guerre EmptyMer 7 Avr 2010 - 9:12

Le principe est très simple:
un rayon est défini: c'est le champ de vision du héros.
les données visitées sont sauvegardée d'une carte à l'autre.
le brouillard peut être masqué par l'activation d'un interrupteur (1 par défaut). Activé: brouillard masqué, Désactivé: brouillard Affiché.
il peut être 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. A nommer "fog.png"
image
[VX] Brouillard de guerre Fog1010

Avec le fond du forum, l'image est difficilement distinguable.

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



Portion de code:



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
  attr_accessor :spriteset

  def update_basic

    Graphics.update               

    Input.update             

    $game_map.update           

  end

end

class Scene_File
  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
Revenir en haut Aller en bas
https://www.ledijonshow.fr https://twitter.com/EleKoptes
 
[VX] Brouillard de guerre
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Chroniques de la guerre des six : La guerre des temps anciens
» [XP]brouillard à l’écran titre
» Chroniques de la guerre des Six : La BD
» Chroniques de la guerre des Six Ragnarok
» Mon Projet : Chroniques de la guerre des Six

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Le Palais Créatif :: ~ PARTAGE ~ :: Scripts et plugins :: RPG Maker VX :: Autres-
Sauter vers: