- BencocoMembre
- Nombre de messages : 31
Age : 34
Localisation : Alsace
Distinction : aucune
Date d'inscription : 04/03/2012
World Map Generator
Mer 8 Mai 2013 - 0: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') :
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é !
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
Retour au listing RGSS3
- SpytjeAdministrateur
- Nombre de messages : 5935
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
Mer 8 Mai 2013 - 2:29
Très bon script il pourra en aider plus d'un j'en suis sur, merci !
_________________
- HeavenStaffeux retraité
- Nombre de messages : 2441
Age : 23
Localisation : Alpes-Maritimes VIRILITÉ OLALA
Distinction : Aucune
Date d'inscription : 18/10/2012
Re: World Map Generator
Mer 8 Mai 2013 - 7:50
C'est un superbe script :o
Merci du partage
Heav'n
Merci du partage
Heav'n
- AsagiMembre
- Nombre de messages : 290
Age : 30
Localisation : France
Distinction : aucune
Date d'inscription : 30/01/2011
Re: World Map Generator
Lun 10 Juin 2013 - 20: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
- KorndorStaffeux retraité
- Nombre de messages : 4959
Age : 111
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
Re: World Map Generator
Lun 10 Juin 2013 - 22:27
Merci beaucoup pour le partage, ça pourrait m'être utile !
Tu es sûr du bug, Asagi ? D'autres gens l'ont testé ? :/
Tu es sûr du bug, Asagi ? D'autres gens l'ont testé ? :/
- SpytjeAdministrateur
- Nombre de messages : 5935
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
Lun 10 Juin 2013 - 23:56
Je confirme, dans projet vierge = même erreur.
_________________
- KorndorStaffeux retraité
- Nombre de messages : 4959
Age : 111
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
Re: World Map Generator
Mar 11 Juin 2013 - 7: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 ?
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 ?
- BencocoMembre
- Nombre de messages : 31
Age : 34
Localisation : Alsace
Distinction : aucune
Date d'inscription : 04/03/2012
Re: World Map Generator
Mar 11 Juin 2013 - 12:19
Bug corrigé comme quoi une petite erreur d'innatention et rien ne va plus !
- KorndorStaffeux retraité
- Nombre de messages : 4959
Age : 111
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
Re: World Map Generator
Mar 11 Juin 2013 - 12:22
Merci beaucoup pour ta correction
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
Je pense que ça me servira tôt ou tard...
Hop, ajouté à ma réserve de scripts intéressants !
Bonne continuation à toi, et merci encore
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
Je pense que ça me servira tôt ou tard...
Hop, ajouté à ma réserve de scripts intéressants !
Bonne continuation à toi, et merci encore
- Coco'Staffeux retraité
- Nombre de messages : 6578
Age : 31
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
Re: World Map Generator
Mar 11 Juin 2013 - 12: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 !
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 !
- BencocoMembre
- Nombre de messages : 31
Age : 34
Localisation : Alsace
Distinction : aucune
Date d'inscription : 04/03/2012
Re: World Map Generator
Mar 11 Juin 2013 - 13: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
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
- BalbereithStaffeux retraité
- Nombre de messages : 4129
Age : 32
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' ]
Date d'inscription : 13/05/2009
Re: World Map Generator
Mar 11 Juin 2013 - 17:22
Donc + 5 pts en passant. Merci du partage
- KorndorStaffeux retraité
- Nombre de messages : 4959
Age : 111
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
Re: World Map Generator
Mar 11 Juin 2013 - 23: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
Je l'avais dit un post plus haut
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
C'est le meilleur moyen d'avoir un bon rendu.
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum