Partagez
Aller en bas
avatar
Bencoco
Membre

Nombre de messages : 31
Age : 27
Localisation : Alsace
Distinction : aucune
Date d'inscription : 04/03/2012

World Map Generator

le Mar 7 Mai 2013 - 22:52
Bonsoir (ou bonjour)

Je viens ici vous proposer une de mes créations pour les grosses faignasses que vous êtes !
Eh oui combien de fois vous êtes vous retrouvé devant votre projet en vous disant "Ah quel beau boulot maintenant je m'attaque à la world map !"
Et là c'est le drame qu'est-ce-que je fais ? par quoi je commence ? qui suis-je ? où vais-je ? enfin le questionnement habituel (si ça ne vous est jamais arrivé ce script ne vous sera d'aucune utilité...)

Et aujourd'hui tel un marchand de tapis je vous propose la solution miracle : un générateur de world map !!!

Bon on va mettre les points sur ves "i" tout de suite, le script va vous générer une base des îles des continents (un pôle nord, un pôle sud et une zone arride désertique au centre du monde) et c'est très joli mais les mappeurs vous le diront le rendu peut être amélioré !!!
en effet il se peut qu'il y ait des choses incohérentes des tiles d'eau toutes seules dans le désert par exemple mais le but est je le dis et je le répète est de créer une base de travail ! ^_^

donc je vous conseil de ne pas utiliser ce script dans votre projet mais de créer un projet que vous appelerez World Map Generator (ou tout autre nom sorti de votre imagination)

dans lequel vous placerez ce script (au dessus de main comme d'hab') :

Spoiler:
Code:


#===============================================================================
# * World Map Generator par Bencoco
#  - version 1
#===============================================================================

module MAPGEN
   
  #numéro des variables de jeu utilisées
  Largeur = 1
  Hauteur = 2
 
  Rep = [0,19,26,38,400,800]
 
  Eau = 2048
  Sable = 3584
  Herbe = 2816
  Neige = 3968
 
  Eauprof = 2096
  Herbefonce = 2864
  Eaupic = 2144
 
  Coline = 3104
  Colineneige = 4016
  Mont = 3152
  Mont2 = 3536
  Montneige = 4304
 
  Pic = 3872
  Bloc = 3920
 
  Arbre = 3008
  Sapin = 3056
  Souche = 3392
  Palmier = 3776
  Sapineige = 4160
 
  Angle = 23.26
 
end

#==============================================================================
# ** Window_Matrix
#------------------------------------------------------------------------------
#  Cette classe permet de générer les cartes automatiquement !
#==============================================================================

class Window_Matrix < Window_Selectable
 
  def initialize
    super(0,0,100,100)
    @largeur = 0
    @hauteur = 0
    #gen_matrix
    self.visible = false
   
  end
  #--------------------------------------------------------------------------
  # * génère la matrice de la carte
  #--------------------------------------------------------------------------
  def gen_matrix
    @largeur = $game_variables[MAPGEN::Largeur]
    @hauteur = $game_variables[MAPGEN::Hauteur]
    @matrix = Array.new(@hauteur) {|index| Array.new(@largeur) {|index| [0,0] } }
    repartition_desert
    #@matrix = Table.new(@largeur,@hauteur)
  end
  #--------------------------------------------------------------------------
  # * initialise les 1 à 5 premiers continents
  #--------------------------------------------------------------------------
  def gen_continent

    continent =  rand(4)
    for i in 0..continent
      @matrix[rand(@hauteur)][rand(@largeur)][0] = 1
      #@matrix[@hauteur/2][@largeur/2] = 1
    end
   
  end
  #--------------------------------------------------------------------------
  # * étend les continents
  #--------------------------------------------------------------------------
  def spread
   
    #l'itérateur permet de déterminer combien de fois répéter l'opération
    #d'étendre le continent pout que la proportion soit d'a peu près 30 % de terre
    # pour 70% de mer
      # test = (@largeur*@hauteur*0.3/6022.172)**(1/0.258)+30
      #surface = @largeur*@hauteur*0.3
      #if surface > 12000 and surface >= 60000
      # iterateur = ((@largeur*@hauteur*0.3-30000)/0.00134)**(1/4.442)+14
      #end
      #if surface > 60000
      # iterateur = ((@largeur*@hauteur*0.3-7000)/0.00134)**(1/4.442)+5
      #end
      #if surface >= 12000
      #  iterateur = ((@largeur*@hauteur*0.3)/0.00134)**(1/4.442)#$game_variables[3]#
      #end
      calc_iterateur(@largeur*@hauteur*0.3)
       
      for repeat in 0..@iterateur
        @surface = 0
        @conti_orig = []
        for ligne in 0...@hauteur
          for colonne in 0...@largeur
            if repeat < (2*@iterateur/3).to_i
              if @matrix[ligne][colonne][0] == 1
                @conti_orig.push([ligne,colonne])
              end
            else
              if @matrix[ligne][colonne][0] != 0
                @conti_orig.push([ligne,colonne])
              end
            end
          end
        end

        @conti_orig.each do |coord|
          toss = rand(2)

          if toss == 0
       
            if coord[0] + 1 > @hauteur - 1
              @matrix[0][coord[1]][0] += 1
            else
              @matrix[coord[0]+1][coord[1]][0] += 1
            end
       
            if coord[1] + 1 > @largeur - 1
              @matrix[coord[0]][0][0] += 1
            else
              @matrix[coord[0]][coord[1]+1][0] += 1
            end
       
            if coord[0] - 1 < 0
              @matrix[@hauteur-1][coord[1]][0] += 1
            else
              @matrix[coord[0]-1][coord[1]][0] += 1
            end
       
            if coord[1] - 1 < 0
              @matrix[coord[0]][@largeur-1][0] += 1
            else
              @matrix[coord[0]][coord[1]-1][0] += 1
            end
         
            @matrix[coord[0]][coord[1]][0] += 1
          end
       
        end

      if repeat % 2 == 0
        gen_continent
      end
    end
    #test = @matrix.uniq
    #test.uniq.sort!
    #print test
    #msgbox "wait"
    clean_matrix

    make_map
  end
 
  #--------------------------------------------------------------------------
  # * Génère des valeurs identiques pour les mêmes zones de la map
  #--------------------------------------------------------------------------
 
  def clean_matrix
   
    repa = MAPGEN::Rep
   
    for ligne in 0...@hauteur
      for colonne in 0...@largeur
        north_pole_lim = zone_frontalière(colonne,@max_north_pole,@min_north_pole).to_i
        south_pole_lim = zone_frontalière(colonne,@max_south_pole,@min_south_pole).to_i
        north_desert_lim = zone_frontalière(colonne,@max_desert_to_n,@min_desert_to_n).to_i
        south_desert_lim = zone_frontalière(colonne,@max_desert_to_s,@min_desert_to_s).to_i
       
        #msgbox north_desert_lim
       
        #------------------------------------------------- eau profonde --------
       
        if  @matrix[ligne][colonne][0] == 0
         
          @matrix[ligne][colonne][0] = 0
          toss = rand(101)
          if  toss == 100
            @matrix[ligne][colonne][1] = 12
          else
            @matrix[ligne][colonne][1] = 1
          end
        end
       
        #------------------------------------------------- eau peu profonde ----
       
        if  @matrix[ligne][colonne][0] != 0 and @matrix[ligne][colonne][0] < repa[1]
         
          if ligne <= north_pole_lim or ligne >= south_pole_lim
           
            @matrix[ligne][colonne][0] = 3
          else
            @matrix[ligne][colonne][0] = 0
          end
        end
       
        #------------------------------------------------- plage ---------------
       
        if @matrix[ligne][colonne][0] >= repa[1] and @matrix[ligne][colonne][0] < repa[2]
       
          if ligne <= north_pole_lim or ligne >= south_pole_lim
       
            @matrix[ligne][colonne][0] = 3
           
          else
            @matrix[ligne][colonne][0] = 1
            toss = rand(80)
            if  toss == 72
              @matrix[ligne][colonne][1] = 15
            end
          end
        end
       
        #------------------------------------------------- plaine --------------
       
        if @matrix[ligne][colonne][0] >= repa[2] and @matrix[ligne][colonne][0] < repa[3]
          if ligne <= north_pole_lim or ligne >= south_pole_lim
           
            @matrix[ligne][colonne][0] = 3
            toss = rand(3)
            if  toss == 0
              @matrix[ligne][colonne][1] = 5
            end

          else
            if ligne >= north_desert_lim and ligne <= south_desert_lim
             
              @matrix[ligne][colonne][0] = 1
              if ligne == north_desert_lim or ligne == south_desert_lim or
                  ligne == north_desert_lim+1 or ligne == south_desert_lim-1 or
                  ligne == north_desert_lim+2 or ligne == south_desert_lim-2
                @matrix[ligne][colonne][1] = 9
              else
                toss = rand(150)
                if  toss == 72
                  @matrix[ligne][colonne][1] = 10
                end
                if  toss == 34
                  @matrix[ligne][colonne][1] = 11
                end
               
              end
            else
              @matrix[ligne][colonne][0] = 2
              toss = rand(3)
              if  toss == 0 or toss == 2
                @matrix[ligne][colonne][1] = 2
              end
            end
          end
        end
       
        #------------------------------------------------- arbres --------------
       
        if @matrix[ligne][colonne][0] >= repa[3] and @matrix[ligne][colonne][0] < repa[4]
          if ligne <= north_pole_lim or ligne >= south_pole_lim
            @matrix[ligne][colonne][0] = 3
            toss = rand(5)
            if  toss == 0
              @matrix[ligne][colonne][1] = 5
            end
            if  toss == 1
              @matrix[ligne][colonne][1] = 13
            end
           
            toss = rand(150)
            if toss == 58
              @matrix[ligne][colonne][1] = 14
            end
          else
            if ligne >= north_desert_lim and ligne <= south_desert_lim
             
              @matrix[ligne][colonne][0] = 1
             
              if ligne == north_desert_lim or ligne == south_desert_lim
               
                @matrix[ligne][colonne][0] = 2
                @matrix[ligne][colonne][1] = 8
               
              else
               
                if ligne == north_desert_lim+1 or ligne == south_desert_lim-1 or
                  ligne == north_desert_lim+2 or ligne == south_desert_lim-2
                 
                  @matrix[ligne][colonne][1] = 8
               
                else
   
                  toss = rand(10)
                  if  toss == 0
                    @matrix[ligne][colonne][1] = 6
                  end
                  toss = rand(150)
                  if toss == 58
                    @matrix[ligne][colonne][1] = 7
                  end
                  if  toss == 72
                    @matrix[ligne][colonne][1] = 10
                  end
                  if  toss == 34
                    @matrix[ligne][colonne][1] = 11
                  end
                end
              end
            else

              @matrix[ligne][colonne][0] = 2
              toss = rand(3)
              if  toss == 0 or toss == 2
                @matrix[ligne][colonne][1] = 2
              end
              toss = rand(100)
              if  toss == 0 or toss == 2
                @matrix[ligne][colonne][1] = 4
              end
            end
          end
        end
     
     
       
  #---------------------------------------------------------------------------

        if @matrix[ligne][colonne][0] >= repa[4] and @matrix[ligne][colonne][0] < repa[5]       
          @matrix[ligne][colonne][0] = 2
          @matrix[ligne][colonne][1] = 4
         
        end
       
        if @matrix[ligne][colonne][0] >= repa[5]#and @matrix[ligne][colonne] < 10
         
          @matrix[ligne][colonne][0] = 2
          @matrix[ligne][colonne][1] = 4
         
        end
      end
     
    end
    forest_generator
    orphan_killer
    #print @matrix
  end
 
  #-----------------------------------------------------------------------------
  # * Génère les bosquets
  #-----------------------------------------------------------------------------
 
  def forest_generator
    surface = 0
    for ligne in 0...@hauteur
      for colonne in 0...@largeur
        if @matrix[ligne][colonne][0] == 2
          surface +=1
        end
      end
    end
   
    foret = 0.3*surface
    #msgbox foret
    if foret > 1231
      calc_iterateur(foret)
    else
      @iterateur = 5
    end
    #msgbox @iterateur
    for i in 0..foret/@iterateur
      x = rand(@hauteur)
      y = rand(@largeur)
   
      while (@matrix[x][y][0] != 2)
        x = rand(@hauteur)
        y = rand(@largeur)
      end
      @matrix[x][y][1] = 3
    end
   

      @iterateur /= 6
    for repeat in 0..@iterateur
      @foret_orig = []
      for ligne in 0...@hauteur
        for colonne in 0...@largeur
          if @matrix[ligne][colonne][1] == 3

                @foret_orig.push([ligne,colonne])

            end
          end
        end

        @foret_orig.each do |coord|
          toss = rand(2)

          if toss == 0
       
            if coord[0] + 1 > @hauteur - 1
              @matrix[0][coord[1]][1] = 3 unless @matrix[0][coord[1]][0]!=2
            else
              @matrix[coord[0]+1][coord[1]][1] = 3 unless @matrix[coord[0]+1][coord[1]][0]!=2
            end
       
            if coord[1] + 1 > @largeur - 1
              @matrix[coord[0]][0][1] = 3 unless @matrix[coord[0]][0][0]!=2
            else
              @matrix[coord[0]][coord[1]+1][1] = 3 unless @matrix[coord[0]][coord[1]+1][0]!=2
            end
       
            if coord[0] - 1 < 0
              @matrix[@hauteur-1][coord[1]][1] = 3 unless @matrix[@hauteur-1][coord[1]][0]!=2
            else
              @matrix[coord[0]-1][coord[1]][1] = 3 unless @matrix[coord[0]-1][coord[1]][0]!=2
            end
       
            if coord[1] - 1 < 0
              @matrix[coord[0]][@largeur-1][1] = 3 unless @matrix[coord[0]][@largeur-1][0]!=2
            else
              @matrix[coord[0]][coord[1]-1][1] = 3 unless @matrix[coord[0]][coord[1]-1][0]!=2
            end
         
            @matrix[coord[0]][coord[1]][1] = 3 unless @matrix[coord[0]][coord[1]][0]!=2
          end
       
        end
    end
   
  end
 
  #-----------------------------------------------------------------------------
  # * Supprime les tiles seules
  #-----------------------------------------------------------------------------
 
  def orphan_killer
    #@surface = 0
    for ligne in 0...@hauteur
      for colonne in 0...@largeur
        #if @matrix[ligne][colonne][0] != 0
        #  @surface +=1
        #end
        for z in 0..1
          orphan = @matrix[ligne][colonne][z]
          get_points(ligne,colonne,z)
          if @p1 != orphan and @p1==@p2 and @p2==@p3 and @p3==@p4 and @p4==@p5 and @p5==@p6 and @p6==@p7 and @p7==@p8
            @matrix[ligne][colonne][z] = @p1
          end
        end
      end
    end
   
  # but = @surface/(@largeur*@hauteur).to_f
  # msgbox but
  # msgbox @surface
  end

#-------------------------------------------------------------------------------
# * Génère le fichier de la map
#-------------------------------------------------------------------------------
 
  def make_map
   

      # def self.make_map(name, display_name, width, height)
      @data_mapinfos = load_data("Data/MapInfos.rvdata2")
      map_id = @data_mapinfos.keys.max + 1
      @map = RPG::Map.new(@largeur, @hauteur)
      #msgbox @map.data(0,0,0)
      @map.display_name = ""
      for ligne in 0...@hauteur
        for colonne in 0...@largeur
         
          # premier rang -------------------------------------------------------
         
          if @matrix[ligne][colonne][0] == 0
            get_points(ligne,colonne,0)
            @code = MAPGEN::Eau
            great_graph(@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,0)
            @map.data[colonne, ligne, 0] = @code
          end
         
          if @matrix[ligne][colonne][0] == 1
            get_points(ligne,colonne,0)
            @code = MAPGEN::Sable
            great_graph(@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,1)
            @map.data[colonne, ligne, 0] = @code
          end
         
          if @matrix[ligne][colonne][0] == 2
            get_points(ligne,colonne,0)
            @code = MAPGEN::Herbe
            great_graph(@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,2)
            @map.data[colonne, ligne, 0] = @code
          end
         
          if @matrix[ligne][colonne][0] == 3
            get_points(ligne,colonne,0)
            @code = MAPGEN::Neige
            great_graph(@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,3)
            @map.data[colonne, ligne, 0] = @code
          end
         
          # deuxième rang -------------------------------------------------------
       
          if @matrix[ligne][colonne][1] == 1
            get_points(ligne,colonne,1)
            @code = MAPGEN::Eauprof
            great_graph(@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,1)
            @map.data[colonne, ligne, 1] = @code
          end
         
          if @matrix[ligne][colonne][1] == 2
            get_points(ligne,colonne,1)
            @code = MAPGEN::Herbefonce
            great_graph(@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,2)
            @map.data[colonne, ligne, 1] = @code
          end
         
          if @matrix[ligne][colonne][1] == 3
            get_points(ligne,colonne,1)
            @code = MAPGEN::Arbre
            great_graph(@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,3)
            @map.data[colonne, ligne, 1] = @code
          end
         
          if @matrix[ligne][colonne][1] == 4
            get_points(ligne,colonne,1)
            @code = MAPGEN::Coline
            great_graph(@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,4)
            @map.data[colonne, ligne, 1] = @code
          end
         
          if @matrix[ligne][colonne][1] == 5
            get_points(ligne,colonne,1)
            @code = MAPGEN::Sapineige
            great_graph(@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,5)
            @map.data[colonne, ligne, 1] = @code
          end
         
          if @matrix[ligne][colonne][1] == 6
            get_points(ligne,colonne,1)
            @code = MAPGEN::Souche
            great_graph(@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,6)
            @map.data[colonne, ligne, 1] = @code
          end
         
          if @matrix[ligne][colonne][1] == 7
           
            @map.data[colonne, ligne, 2] = 5
          end
          if @matrix[ligne][colonne][1] == 8
            get_points(ligne,colonne,1)
            @code = MAPGEN::Mont
            great_graph(@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,8)
            @map.data[colonne, ligne, 1] = @code
          end
          if @matrix[ligne][colonne][1] == 9
            get_points(ligne,colonne,1)
            @code = MAPGEN::Mont2
            great_graph(@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,9)
            @map.data[colonne, ligne, 1] = @code
          end
          if @matrix[ligne][colonne][1] == 10
            get_points(ligne,colonne,1)
            @code = MAPGEN::Pic
            great_graph(@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,10)
            @map.data[colonne, ligne, 1] = @code
          end
          if @matrix[ligne][colonne][1] == 11
            get_points(ligne,colonne,1)
            @code = MAPGEN::Bloc
            great_graph(@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,11)
            @map.data[colonne, ligne, 1] = @code
          end
          if @matrix[ligne][colonne][1] == 12
            get_points(ligne,colonne,1)
            @code = MAPGEN::Eaupic
            great_graph(@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,12)
            @map.data[colonne, ligne, 1] = @code
          end
          if @matrix[ligne][colonne][1] == 13
            get_points(ligne,colonne,1)
            @code = MAPGEN::Colineneige
            great_graph(@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,13)
            @map.data[colonne, ligne, 1] = @code
          end
          if @matrix[ligne][colonne][1] == 14
           
            @map.data[colonne, ligne, 2] = 6
          end
          if @matrix[ligne][colonne][1] == 15
            get_points(ligne,colonne,1)
            @code = MAPGEN::Palmier
            great_graph(@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,15)
            @map.data[colonne, ligne, 1] = @code
          end
        end
      end
      create_map_entry(map_id, $game_actors[1].name)
     
      save_data(@map, sprintf("Data/Map%03d.rvdata2", map_id))
      save_data(@data_mapinfos, "Data/MapInfos.rvdata2")
    #  for i in 0..@map.bitmaps.count
          #msgbox @map.bitmaps[i]
      #end
      msgbox "La carte a été créée "
      #@map = load_data(sprintf("Data/Map%03d.rvdata2", @map_id))
    end
   
#-------------------------------------------------------------------------------
# * crée les entrées de la map
#-------------------------------------------------------------------------------
   
    def create_map_entry(map_id, name)
      entry = RPG::MapInfo.new
      entry.name = name
      entry.order = map_id
      @data_mapinfos[map_id] = entry
    end
   
#-------------------------------------------------------------------------------
# * définit les points entoutrant la case où l'on travaille
#-------------------------------------------------------------------------------
   
    def get_points(ligne,colonne,z)
   
      if ligne - 1 > 0 and colonne - 1 > 0
        @p1 = @matrix[ligne-1][colonne-1][z]
      else
        @p1 = @matrix[ligne][colonne][z]
      end
      if ligne - 1 > 0
        @p2 = @matrix[ligne-1][colonne][z]
      else
        @p2 = @matrix[ligne][colonne][z]
      end
      if ligne - 1 > 0 and colonne + 1 < @largeur - 1
        @p3 = @matrix[ligne-1][colonne+1][z]
      else
        @p3 = @matrix[ligne][colonne][z]
      end
      if colonne + 1 < @largeur - 1
        @p4 = @matrix[ligne][colonne+1][z]
      else
        @p4 = @matrix[ligne][colonne][z]
      end
      if ligne + 1 < @hauteur - 1 and colonne + 1 < @largeur - 1
        @p5 = @matrix[ligne+1][colonne+1][z]
      else
        @p5 = @matrix[ligne][colonne][z]
      end
      if ligne + 1 < @hauteur - 1
        @p6 = @matrix[ligne+1][colonne][z]
      else
        @p6 = @matrix[ligne][colonne][z]
      end
      if ligne + 1 < @hauteur - 1 and colonne - 1 > 0
        @p7 = @matrix[ligne+1][colonne-1][z]
      else
        @p7 = @matrix[ligne][colonne][z]
      end
      if colonne - 1 > 0
        @p8 = @matrix[ligne][colonne-1][z]
      else
        @p8 = @matrix[ligne][colonne][z]
      end
    end
   
#-------------------------------------------------------------------------------
# * Calcule quelle autotile appliquer
#  - @p1 à p8 sont les points entourant la case où l'on travaille
#  - c est le point à comparer
#-------------------------------------------------------------------------------

  def great_graph(p1,p2,p3,p4,p5,p6,p7,p8,c)
     
# - calcul pour les coins-------------------------------------------------------

      if p1 != c and p2==c and p3==c and p4==c and p5==c and p6==c and p7==c and p8==c
        @code += 1
      end
      if p3 != c and p2==c and p1==c and p4==c and p5==c and p6==c and p7==c and p8==c
        @code += 2
      end
      if p1 != c and p3 != c and p2==c and p4==c and p5==c and p6==c and p7==c and p8==c
        @code += 3
      end
      if p5 != c and p2==c and p3==c and p4==c and p1==c and p6==c and p7==c and p8==c
        @code += 4
      end
      if p1 != c and p5 != c and p2==c and p4==c and p3==c and p6==c and p7==c and p8==c
        @code += 5
      end
      if p3 != c and p5 != c and p2==c and p4==c and p1==c and p6==c and p7==c and p8==c
        @code += 6
      end
      if p3 != c and p5 != c and p1 != c and p2==c and p4==c and p6==c and p7==c and p8==c
        @code += 7
      end
      if p7 != c and p2==c and p3==c and p4==c and p5==c and p6==c and p1==c and p8==c
        @code += 8
      end
      if p7 != c and p1 != c and p2==c and p3==c and p4==c and p5==c and p6==c and p8==c
        @code += 9
      end
      if p7 != c and p3 != c and p1==c and p2==c and p4==c and p5==c and p6==c and p8==c
        @code += 10
      end
      if p1 != c and p3 != c and p7 != c and p2==c and p4==c and p5==c and p6==c and p8==c
        @code += 11
      end
      if p7 != c and p5 != c and p1==c and p2==c and p3==c and p4==c and p6==c and p8==c
        @code += 12
      end
      if p1 != c and p5 != c and p7 != c and p2==c and p4==c and p3==c and p6==c and p8==c
        @code += 13
      end
      if p3 != c and p5 != c and p7 != c and p1==c and p2==c and p4==c and p6==c and p8==c
        @code += 14
      end
      if p1 != c and p3 != c and p5 != c and p7 != c and p2==c and p4==c and p6==c and p8==c
        @code += 15
      end
     
# - calcul pour les parties droites + coins-------------------------------------
     
      if p8 != c and p2==c and p3==c and p4==c and p5==c and p6==c 
        @code += 16
      end
      if p8 != c and p3 != c and p2==c and p4==c and p5==c and p6==c
        @code += 17
      end
      if p8 != c and p5 != c and p2==c and p4==c and p3==c and p6==c 
        @code += 18
      end
      if p8 != c and p3 != c and p5 != c and p2==c and p4==c and p6==c
        @code += 19
      end
      if p2 != c and p4==c and p5==c and p6==c and p7==c and p8==c
        @code += 20
      end
      if p2 != c and p5 != c and p4==c and p6==c and p7==c and p8==c
        @code += 21
      end
      if p2 != c and p7 != c and p4==c and p6==c and p5==c and p8==c
        @code += 22
      end
      if p2 != c and p5 != c and p7 != c and p4==c and p6==c and p8==c
        @code += 23
      end
      if p4 != c and p1==c and p2==c and p6==c and p7==c and p8==c
        @code += 24
      end
      if p4 != c and p7 != c and p1==c and p2==c and p6==c and p8==c
        @code += 25
      end
      if p4 != c and p1 != c and p2==c and p6==c and p7==c and p8==c
        @code += 26
      end
      if p4 != c and p1 != c and p7 != c and p2==c and p6==c and p8==c
        @code += 27
      end
      if p6 != c and p1==c and p2==c and p3==c and p4==c and p8==c
        @code += 28
      end
      if p6 != c and p1 != c and p2==c and p3==c and p4==c and p8==c
        @code += 29
      end
      if p6 != c and p3 != c and p1==c and p2==c and p8==c and p4==c
        @code += 30
      end
      if p6 != c and p1 != c and p3 != c and p2==c and p4==c and p8==c
        @code += 31
      end

# - calcul pour les parties droites --------------------------------------------
     
      if p8 != c and p4 != c and p2==c and p6==c
        @code += 32
      end
      if p2 != c and p6 != c and p4==c and p8==c
        @code += 33
      end
     
      if p2 != c and p8 != c and p4==c and p5==c and p6==c
        @code += 34
      end
      if p2 != c and p8 != c and p5 != c and p4==c and p6==c
        @code += 35
      end
     
      if p2 != c and p4 != c and p8==c and p7==c and p6==c
        @code += 36
      end
      if p2 != c and p4 != c and p7 != c and p8==c and p6==c
        @code += 37
      end
     
      if p4 != c and p6 != c and p2==c and p8==c and p1==c
        @code += 38
      end
      if p4 != c and p6 != c and p1 != c and p8==c and p2==c
        @code += 39
      end
     
      if p6 != c and p8 != c and p3==c and p4==c and p2==c
        @code += 40
      end
      if p6 != c and p8 != c and p3 != c and p4==c and  p2==c
        @code += 41
      end
     
      if p2 != c and p4 != c and p8 != c and p6==c
        @code += 42
      end
     
      if p2 != c and p6 != c and p8 != c and p4==c
        @code += 43
      end
      if p4 != c and p6 != c and p8 != c and p2==c
        @code += 44
      end
      if p2 != c and p4 != c and p6 != c and p8==c
        @code += 45
      end

      if p2 != c and p4 != c and p6 != c and p8 != c
        @code += 46
      end
     
  end
 
  #--------------------------------------------------------------------------
  # * Calcule les proportions de désert et de zone glacée
  #--------------------------------------------------------------------------
 
  def repartition_desert
 
    angle = MAPGEN::Angle
   
    bande = (angle*0.8*Math::PI*@hauteur)/360
   
    @max_north_pole = (bande*0.7)
    @min_north_pole = (bande*0.35)
   
    @max_south_pole = @hauteur-(bande*0.7)
    @min_south_pole = @hauteur-(bande*0.35)
    bande *= 1.5
    @max_desert_to_n =(@hauteur-bande)/2
    @min_desert_to_n = (@hauteur-(bande*0.5))/2
   
    @max_desert_to_s =(@hauteur+bande)/2
    @min_desert_to_s = (@hauteur+(bande*0.5))/2
   
    #msgbox @max_north_pole
    #msgbox @max_south_pole
    #msgbox @max_desert_to_n
    #msgbox @max_desert_to_s
    #msgbox @min_north_pole
    #msgbox @min_south_pole
    #msgbox @min_desert_to_n
  # msgbox @min_desert_to_s
  end
 
  def zone_frontalière(colonne,max,min)
 
    moy = (max+min)/2
    ampl = (max-min)/2
   
    limite = ampl*Math::cos(colonne/(ampl*2))+moy
   
    return limite
   
  end
  #--------------------------------------------------------------------------
  # * Génère des valeurs identiques pour les mêmes zones de la map
  #--------------------------------------------------------------------------
 
  def def_coin(ligne,min,max)
   
    @coin = 10*(ligne-min)/(max-min).to_i
   
    if @coin <= 2
      @coin = 2
    end
   
   
 
  end
 
  #-----------------------------------------------------------------------------
  # * Calcule la racine réelle du polynome de degré 3
  #  associé au taux d'expansion moyen des continents
  #-----------------------------------------------------------------------------
 
  def calc_iterateur(s)
   
    #Ne surtout pas modifier ces valeurs !!!
#=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
    a = 0.3106    #=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
    b = 2.2111    #=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
    c = -203.41  #=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
    d = 1231.7-s  #=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
#=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=
 
    p = (c/a)-((b**2)/(3*(a**2)))
    q = ((2*(b**3))/(27*(a**3))).to_f+(d/a)-((b*c)/(3*(a**2)))
   
    delta = (((p**3)/27)+((q**2)/4))
    #msgbox delta
  # cbrt = cubicroot sqrt = squareroot !!
      if delta < 0
      delta *= -1
    end
    u = Math::cbrt(-(q/2)+Math::sqrt(delta))
    v = Math::cbrt(-(q/2)-Math::sqrt(delta))
   
   
    @iterateur = (u+v)-(b/(3*a))


  end

end

class Scene_Map < Scene_Base
 

  def create_all_windows
    create_message_window
    create_scroll_text_window
    create_location_window
    create_matrix_w
  end
 
  def create_matrix_w
    @matrix_w = Window_Matrix.new
  end
 
    def update_call_menu
    if $game_system.menu_disabled || $game_map.interpreter.running?
      @menu_calling = false
    else
      @menu_calling ||= Input.trigger?(:B)
      call_menu if @menu_calling && !$game_player.moving?
    end
    if Input.trigger?(:ALT)
      @matrix_w.gen_matrix
      @matrix_w.gen_continent
      @matrix_w.spread
    end
  end
end

C'est là que ça devient compliqué (nan je plaisante)

Dans la bes de données renommez le premier personnage "MAP001"

Puis sur la première Map créez un évènement paramétré comme suit :



maintenant lancez le projet et allez parler à votre PNJ

il y a une règle à respecter les dimensions de la map doivent être au minimum de 17*13 mais c'est stupide pour une world map !

lorsqu'il vous le demande appuyez sur ALT et laissez la magie opérer, ça peut prendre un certain temps qui dépend bien évidement des capacités de votre PC et de la taille de map demandée :-)

un petit message apparait lorsque tout est fait il ne vous reste plus qu'a fermer le projet puis le réouvrir
et là tel un enfant devant le sapin le matin de noël vous aurez la joie de voir qu'une nouvelle map est apparue dans la liste des maps !
il n'y a plus qu'à la copier dans votre projet et le tour est joué !

merci bibi !!!

un petit apreçu du rendu brut :

une map 200x200


une map 300x300


une map 600x600 eh oui on peut générer des map plus grandes que ce que propose RPG maker de base !


Sur ce bonne continuation et n'hésitez pas à me faire part du moindre problème que vous pouriez rencontrer !

EDIT : il manquait une commande dans le script que j'ai oubliée de copier quand j'ai compilé le script d'où l'erreur que certains d'entre vous ont rencontrée ! mais c'est corrigé !



+5 pts de participation.
Retour au listing RGSS3


Dernière édition par Bencoco le Mar 11 Juin 2013 - 11:45, édité 2 fois
avatar
Spytje
Administrateur

Nombre de messages : 5899
Localisation : La terre
Distinction : Spiraliste [Korn']
Forestia : Projet du mois juillet 2014
Papy Pulkigrat [Yama']
Date d'inscription : 16/03/2008

Re: World Map Generator

le Mer 8 Mai 2013 - 0:29

Très bon script il pourra en aider plus d'un j'en suis sur, merci !
avatar
Heaven
Staffeux retraité

Nombre de messages : 2451
Age : 17
Localisation : Alpes-Maritimes VIRILITÉ OLALA
Distinction : Aucune
Date d'inscription : 18/10/2012

Re: World Map Generator

le Mer 8 Mai 2013 - 5:50
C'est un superbe script :o

Merci du partage


Heav'n
avatar
Asagi
Membre

Nombre de messages : 290
Age : 24
Localisation : France
Distinction : aucune
Date d'inscription : 30/01/2011

Re: World Map Generator

le Lun 10 Juin 2013 - 18:38
Marche pas, undefineted methode "gen matrix" for nillclass -_- pourtant je suis bien les consigne et d'habitude j'arrive a résoudre les script mais là j'ai aucune idée de comment résoudre ça xD
avatar
Korndor
Staffeux retraité

Nombre de messages : 4959
Age : 105
Localisation : Erem Vehyx
Distinction : Champion de boxe et au lit ! :O [Wax]
Être Mythique [Mister]
Papi Korndor qui a l'ostéoporose [Skillo]
Soldat Ikéa [Coco']
Un bonhomme, un vrai ! [Neresis]
Vieillard acariâtre [Didier Gustin]
Date d'inscription : 16/12/2007
http://www.rpgmakervx-fr.com/

Re: World Map Generator

le Lun 10 Juin 2013 - 20:27
Merci beaucoup pour le partage, ça pourrait m'être utile ! Smile

Tu es sûr du bug, Asagi ? D'autres gens l'ont testé ? :/


Dernière édition par Korndor le Mar 11 Juin 2013 - 5:19, édité 2 fois
avatar
Spytje
Administrateur

Nombre de messages : 5899
Localisation : La terre
Distinction : Spiraliste [Korn']
Forestia : Projet du mois juillet 2014
Papy Pulkigrat [Yama']
Date d'inscription : 16/03/2008

Re: World Map Generator

le Lun 10 Juin 2013 - 21:56
Je confirme, dans projet vierge = même erreur.
avatar
Korndor
Staffeux retraité

Nombre de messages : 4959
Age : 105
Localisation : Erem Vehyx
Distinction : Champion de boxe et au lit ! :O [Wax]
Être Mythique [Mister]
Papi Korndor qui a l'ostéoporose [Skillo]
Soldat Ikéa [Coco']
Un bonhomme, un vrai ! [Neresis]
Vieillard acariâtre [Didier Gustin]
Date d'inscription : 16/12/2007
http://www.rpgmakervx-fr.com/

Re: World Map Generator

le Mar 11 Juin 2013 - 5:18
Bencoco, tu as moyen de résoudre cette erreur ?
C'est dommage ce script semble très utile !

Tu as réussi à le faire fonctionner chez toi pour nous le présenter je suppose, y a-t-il des manips spéciales à effectuer ?
avatar
Bencoco
Membre

Nombre de messages : 31
Age : 27
Localisation : Alsace
Distinction : aucune
Date d'inscription : 04/03/2012

Re: World Map Generator

le Mar 11 Juin 2013 - 10:19
Bug corrigé comme quoi une petite erreur d'innatention et rien ne va plus !
avatar
Korndor
Staffeux retraité

Nombre de messages : 4959
Age : 105
Localisation : Erem Vehyx
Distinction : Champion de boxe et au lit ! :O [Wax]
Être Mythique [Mister]
Papi Korndor qui a l'ostéoporose [Skillo]
Soldat Ikéa [Coco']
Un bonhomme, un vrai ! [Neresis]
Vieillard acariâtre [Didier Gustin]
Date d'inscription : 16/12/2007
http://www.rpgmakervx-fr.com/

Re: World Map Generator

le Mar 11 Juin 2013 - 10:22
Merci beaucoup pour ta correction Smile

En passant, cela m'étonne que tu n'aies pas reçu de points de participation pour cet ajout important...
Ça devrait venir, et sinon tant pis :P

Je pense que ça me servira tôt ou tard...
Hop, ajouté à ma réserve de scripts intéressants ! Very Happy

Bonne continuation à toi, et merci encore Smile
avatar
Coco'
Staffeux retraité

Nombre de messages : 6575
Age : 24
Localisation : Nord/Douai
Distinction : EL DICTATOR COCO'
Coco-Dieu en puissance

Grand gourou suppléant de la secte des MAGIKARP
Leader charismatique des 2beStaffieux

N°1 du forum
Président, vice-présidents et membres honoraires de la cour suprême du forum
Président de l'association des grosses distinctions CMB
Date d'inscription : 02/07/2008
http://www.rpgmakervx-fr.com

Re: World Map Generator

le Mar 11 Juin 2013 - 10:57
Très beau script, très utile dans certaines situations ! Juste une question, c'est possible d'avoir des maps avec des continents un peu moins circulaires ? Par exemple, toujours un gros continent puis quelques petites iles annexes, etoo !


PS : Tu me diras si tu as reçu des points de participation pour ta création, comme il n'y a aucune mention l'indiquant !
avatar
Bencoco
Membre

Nombre de messages : 31
Age : 27
Localisation : Alsace
Distinction : aucune
Date d'inscription : 04/03/2012

Re: World Map Generator

le Mar 11 Juin 2013 - 11:41
Je ne pense pas avoir eu de points pour ce script >.<

pour la forme des continents il faut que je regarde il y a quelques paramètres à modifier mais c'est un des points ou j'ai eu un peut de mal a rendre du réalisme ^^

si il y a des idées je suis preneur pour l'instant pour développer un continent je fais apparaitre un point ( plus précisément un 1 dans un océan de 0)
qui se répand de façon plus ou moins aléatoire...

encore désolé pour l'erreur de copie Smile
avatar
Balbereith
Staffeux retraité

Nombre de messages : 4129
Age : 25
Localisation : dans l'ombre...
Distinction : Péripatéticienne à temps perdu
Helly n°666 [Coco' ;D]
mon ptit balbounet p'tit jardinier en herbe(les râteaux ça le connait) [tonton Adurna]
Cultivateur professionnel de la commu' (il a de bons outils en de nombreux exemplaires ) [Coco' Smile]
Date d'inscription : 13/05/2009

Re: World Map Generator

le Mar 11 Juin 2013 - 15:22
Donc + 5 pts en passant. Merci du partage Wink
avatar
Korndor
Staffeux retraité

Nombre de messages : 4959
Age : 105
Localisation : Erem Vehyx
Distinction : Champion de boxe et au lit ! :O [Wax]
Être Mythique [Mister]
Papi Korndor qui a l'ostéoporose [Skillo]
Soldat Ikéa [Coco']
Un bonhomme, un vrai ! [Neresis]
Vieillard acariâtre [Didier Gustin]
Date d'inscription : 16/12/2007
http://www.rpgmakervx-fr.com/

Re: World Map Generator

le Mar 11 Juin 2013 - 21:13
@Coco' a écrit:PS : Tu me diras si tu as reçu des points de participation pour ta création, comme il n'y a aucune mention l'indiquant !

@Korndor a écrit:En passant, cela m'étonne que tu n'aies pas reçu de points de participation pour cet ajout important...
Ça devrait venir, et sinon tant pis :P

Je l'avais dit un post plus haut :P

Pour ce qui est de la régularité du rendu, il est à mon avis largement faisable de modifier la map "à la main" après coup Smile
C'est le meilleur moyen d'avoir un bon rendu.
Contenu sponsorisé

Re: World Map Generator

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