|
| Auteur | Message |
---|
Heaven Chevalier Dragon (niveau 1)
Messages postés : 755 Date d'inscription : 01/04/2013 Jauge LPC :
| Sujet: World map générator Mar 14 Mai 2013 - 22:23 | |
| Yo Voici un super script (Je le trouve super utile...) et c'est avec son autorisation que je le partage. Auteur : Bencoco (Credit obligatoire) - Bencoco a écrit:
- 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 poits 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 pourriez rencontrer !
Heav'n EDIT > Changement de script, quelques oublies de la part de l'auteur.
Dernière édition par Heaven le Ven 14 Juin 2013 - 14:07, édité 1 fois |
| | | Elekami Fondateur
Messages postés : 19071 Date d'inscription : 19/07/2008 Jauge LPC :
| Sujet: Re: World map générator Mar 14 Mai 2013 - 22:33 | |
| Merci du partage, points. |
| | | Zexion Administrateur
Messages postés : 6228 Date d'inscription : 04/01/2012 Jauge LPC :
| Sujet: Re: World map générator Mer 15 Mai 2013 - 0:38 | |
| Tiens, ça c'est un script original. Utile pour dépanner ceux qui seraient en manque d'inspiration. Décidément, ce Bencoco a de la suite dans les idées. =) |
| | | Vorselon Chevalier Mage (niveau 3)
Messages postés : 450 Date d'inscription : 27/04/2012 Jauge LPC :
| Sujet: Re: World map générator Mer 15 Mai 2013 - 0:48 | |
| Merci du partage, original comme dit plus haut. |
| | | Heaven Chevalier Dragon (niveau 1)
Messages postés : 755 Date d'inscription : 01/04/2013 Jauge LPC :
| Sujet: Re: World map générator Ven 14 Juin 2013 - 14:05 | |
| Désolé du nécro, mais il y avait un petit problème dans le script.> EDIT DU PREMIER POST.Mise à jour,du script .- 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 Heav'n |
| | | Zexion Administrateur
Messages postés : 6228 Date d'inscription : 04/01/2012 Jauge LPC :
| Sujet: Re: World map générator Ven 14 Juin 2013 - 20:03 | |
| Merci Heaven. |
| | | scorpioss93 Paysan (niveau 1)
Messages postés : 1 Date d'inscription : 09/09/2013 Jauge LPC :
| Sujet: Re: World map générator Lun 9 Sep 2013 - 11:29 | |
| |
| | | Heaven Chevalier Dragon (niveau 1)
Messages postés : 755 Date d'inscription : 01/04/2013 Jauge LPC :
| Sujet: Re: World map générator Lun 9 Sep 2013 - 17:49 | |
| scorpioss93> Content que ça te soit utile mais fais gaffe au nécroposte, le dernier message remonte à plus d'un mois Heav'n |
| | | Contenu sponsorisé
| Sujet: Re: World map générator | |
| |
| | | |
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |