Pokémon Script Project Forum Index

Manuel | Search
 Information des admins 
Si vous désirez parler de PSP ou obtenir du soutient là dessus, merci d'aller faire un tour sur https://pokemonworkshop.com/forum/index.php Imbécile heureux

Mappemonde
Goto page: 1, 2  >
 
Post new topic   Reply to topic    Pokémon Script Project Forum Index -> Game Making -> Ressources techniques -> Scripts
Previous topic :: Next topic   
Author Message
Brendan75
Ex-staff


Joined: 24 Mar 2008
Posts: 1,827
Localisation: Paris
Masculin

PostPosted: Tue 29 Dec - 17:06 (2009)    Post subject: Mappemonde

Mappemonde


Non libre


Introduction
La mappemonde pose de nombreux problèmes parmi lesquels sa taille : un carreau d'une carte pokémon mesure 8px de côté, c'est 4 fois
moins qu'un carreau RMXP (32px de côté), en augmentant la taille de la carte à ce point on réduit grandement sa qualité hors en tant que
graphiste la qualité des images c'est un problème important pour moi. Ce script est très simple de par mes capacités limités en script mais
même s'il n'a pas toute les qualités de scripts plus complexes, il présente un avantage conséquent : il est flexible. N'importe qui peut le
régler comme il le souhaite et choisir la taille des carreaux de sa carte.

Mise en place et Utilisation
1. Le Script

Code:

#==============================================================================
# ■ Scene_Carte
# par Brendan 75
# 29/12/09
#-----------------------------------------------------------------------------
# Mappemonde adaptable à n'importe qu'elle région.
#==============================================================================
class Scene_Carte
 
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize
   
    # Numéro de la variable des coordonnée du hero en X et en Y
    $var_x = 60
    $var_y = 61
   
    # Nom de l'image de fond (avec l'extension et entre guillement)
    @carte_img = "map.png"
   
    # Nom de l'image du curseur (avec l'extension et entre guillement)
    @curseur_img = "map_curseur.png"
   
    # Nom de l'image réprésentant le personnage (avec l'extension et entre guillement)
    @perso_img = "map_hero.png"
   
    # La map est-elle visible en fond ? (true si oui, false si non)
    @spriteset_visible = true
   
    # Coordonnées X et Y de la carte
    @map_x = 0
    @map_y = 0
   
    # Taille des cases (mettre 32 pour 32x32)
    @cote_case = 8
   
    # Nombre de case à la verticale et à l'horizontale
    @nb_case_v = 40
    @nb_case_h = 60
   
    # Coordonnées X et Y des noms
    @text_x = 0
    @text_y = 0
   
    # Couleur du texte pour les noms (Color.new(Rouge, Vert, Bleu), par défaut blanc)
    @text_color = Color.new(255, 255, 255)
   
    # Taille du texte pour les noms ($fontsize pour la taille par défaut)
    @text_size = $fontsize
   
    # Police du texte pour les noms ($fontface pour la police par défaut, nom entre guillemet)
    @text_police = $fontface
   
    # Idem pour les descriptions.
    @desc_x = 0
    @desc_y = 0
    @desc_color = Color.new(255, 255, 255)
    @desc_size = $fontsize
    @desc_police = $fontface
   
    #--------------------------------------------------------------------------
    # Les zones
    #
    #   -> Nom (entre guillemets)
    #   -> Description
    #   -> Découvert
    #   -> type (0:"normal" 1:"ville")
    #
    #--------------------------------------------------------------------------
     
    if $local == nil
      $local =  []
      for x in 0.. @nb_case_h-1
        $local[x] = []
        for y in 0.. @nb_case_v-1
          $local[x][y] = ["","", false, 0]
        end
      end
    end
   
    # - init(x, y, nom, desc, type) pour initialisé une zone. -
    init(0, 0, "Exemple 1", "Rien qu'un exemple.", 0)
    init(3, 2..4, "Exemple 2", "Rien qu'un exemple...", 0)   
    # ---------------------------------------------------------
   
    note
  end
 
 
  #--------------------------------------------------------------------------
  # ● Main
  #--------------------------------------------------------------------------
  def main
   
    @spriteset = Spriteset_Map.new if @spriteset_visible
   
    @background = Sprite.new
    @map.bitmap = RPG::Cache.picture(@carte_img)
    @background.x = 0
    @background.y = 0
    @background.z = 5
   
    @curseur = Sprite.new
    @curseur.bitmap = RPG::Cache.picture(@curseur_img)
    @curseur.x = @map_x + @cote_case * ($game_variables[$var_x]-1)
    @curseur.y = @map_y + @cote_case * ($game_variables[$var_y]-1)
    @curseur.z = 8
    @index = [$game_variables[$var_x],$game_variables[$var_y]]
   
    @hero = Sprite.new
    @hero.bitmap = RPG::Cache.picture(@perso_img)
    @hero.x = @map_x + @cote_case * ($game_variables[$var_x]-1)
    @hero.y = @map_y + @cote_case * ($game_variables[$var_y]-1)
    @hero.z = 7
   
    @text = Window_Base.new(0 - 16, 0 - 16, 672, 512)
    @text.opacity = 0
    @text.contents = Bitmap.new(672, 512)
    @text.z = 6
   
    refresh
   
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @spriteset.dispose if @spriteset_visible
    @background.dispose
    @curseur.dispose
    @hero.dispose
    @text.dispose
  end
 
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------
  def update
   
    @curseur.x = @map_x + @cote_case * (@index[0]-1)
    @curseur.y = @map_y + @cote_case * (@index[1]-1)
   
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
      return
    end
   
    if Input.trigger?(Input::DOWN)
      if @index[1] != @nb_case_v
        $game_system.se_play($data_system.cursor_se)
        @index[1] += 1
      end
      refresh
      return
    end
     
    if Input.trigger?(Input::UP)
      if @index[1] != 1
        $game_system.se_play($data_system.cursor_se)
        @index[1] -= 1
      end
      refresh
      return
    end
     
    if Input.trigger?(Input::LEFT)
      if @index[0] != 1
        $game_system.se_play($data_system.cursor_se)
        @index[0] -= 1
      end
      refresh
      return
    end
     
    if Input.trigger?(Input::RIGHT)
      if @index[0] != @nb_case_h
        $game_system.se_play($data_system.cursor_se)
        @index[0] += 1
      end
      refresh
      return
    end
  end
 
  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------
  def refresh
    @text.contents.clear
    string = $local[@index[0]][@index[1]][0]
    desc  =  $local[@index[0]][@index[1]][1]
    @text.contents.font.name = @text_police
    @text.contents.font.size = @text_size
    @text.draw_text(@text_x, @text_y, 247, 16, string, 1, @text_color, 0)
    @text.contents.font.name = @desc_police
    @text.contents.font.size = @desc_size
    @text.draw_text(@desc_x, @desc_y, 247, 16, desc, 1, @desc_color, 0)
  end
 
  #--------------------------------------------------------------------------
  # ● Init(x, y, nom, desc, type)
  #--------------------------------------------------------------------------
  def init(o_x, o_y, nom, desc, o_type)
   
    if o_type.is_a? String
      case o_type
      when "ville"
        type = 1
      else
        type = 0
      end
    else
      type = o_type
    end
     
    if o_x.is_a? Range
      o_x.each {|x|
        if o_y.is_a? Range
          o_y.each {|y| $local[x][y] = [nom,desc, false, type] }
        else
          $local[x][o_y] = [nom,desc, false, type]
        end         
      }
    else
      if o_y.is_a? Range
        o_y.each {|y| $local[o_x][y] = [nom,desc, false, type] }
      else
        $local[o_x][o_y] = [nom,desc, false, type]
      end
     
    end   
  end
 
  #--------------------------------------------------------------------------
  # ● note
  #--------------------------------------------------------------------------
  def note
    logfile = File.open("Data/carte.txt", "w")
    logfile.write("# ---------- Mappemonde ----------\n")
    logfile.write("\n")
    empty = 0
   
    for x in 0..$local.size-1
      for y in 0..$local[x].size-1
        nom = $local[x][y][0]
        if nom.length != 0
          desc = $local[x][y][1]
          type = $local[x][y][3] == 0 ? "normal" : "ville"
          string = x.to_s + '.' + y.to_s + ' -> ' + nom + ' : ' + desc + '('+type+')'
          logfile.write(string)
          logfile.write("\n")
        else
          empty += 1
        end
      end
    end
    logfile.write("\n")
    string = "Et #{empty.to_s} case"+ (empty > 1 ? "s vides." : " vide.")   
    logfile.write(string)
    logfile.close
  end
   
end

#==============================================================================
# ■ Appel depuis la map
#
# Remplacez :
#   -> Y par la touche qui ouvre la carte depuis la carte.
#   -> 200 par le n°de l'interrupteur qui active cette fonction.
#
#==============================================================================
class Scene_Map
 
  alias map_update update
  def update
    if Input.trigger?(Input::Y) and $game_switches[200]
      $scene = Scene_Carte.new
    end
    map_update
  end
end

#==============================================================================
# ■ Interpreter
#
#   Fonctions lié à la carte.
#
#==============================================================================

class Interpreter
 
  #--------------------------------------------------------------------------
  # ● Init_map (facultatif) - Remise à Zéro des infos de la map.
  #--------------------------------------------------------------------------
  def init_map
    Scene_Carte.initialize
  end
 
  #--------------------------------------------------------------------------
  # ● Init_local - Modification des infos sur un lieu (comme les "init" ligne 82)
  #--------------------------------------------------------------------------
  def init_local(x, y, nom, desc, type)
    Scene_Carte.init(x, y, nom, desc, type)
    Scene_Carte.note
  end
 
  #--------------------------------------------------------------------------
  # ● Scene_carte - Appel de la Carte
  #--------------------------------------------------------------------------
  def scene_carte
    $scene = Scene_Carte.new
  end
 
  #--------------------------------------------------------------------------
  # ● Local - Défini la position du héro
  #--------------------------------------------------------------------------
  def local(x_or_name, o_y = nil)
    if $local == nil
      Scene_Carte.initialize
    end
    @data = []
    if y == nil
      @exist = false
      for x in 0..$local.size-1
        for y in 0..$local[x].size-1
          if $local[x][y][0] == x_or_name and !@exist
            @exist == true
            @data = [x, y]
            $local[x][y][2] = true
          end
        end
      end
      print("le lieu : #{x_or_name} n'existe pas.") if !@exist
      @data [1, 1] if !@exist
    else
      @data = [x_or_name, o_y]
      $local[x_or_name][o_y][2] = true
    end
    $game_variables[$var_x] = @data[0]
    $game_variables[$var_y] = @data[1]
  end
 
end


Placez ce script n'importe où, au dessus de "Main". La partie "Initialize"(l14) est à modifier.

2. Les Coordonnées
Les coordonnées de la carte et des textes vous sont demandées. Je rappel au passage que x est horizontal et y vertical, on calcule les coordonnées
en pixel en partant du coin supérieur gauche (coordonnées 0; 0). Pour les coordonnées de la carte, on exclut les bordures et les "décorations" qui
entourent la carte et on ne prend en compte que la carte "praticable" par le curseur. Le texte peut être affiché n'importe où dans la fenêtre.

3. Le Quadrillage
Le principale avantage du script est le choix du quadrillage. Chaque carreau est un carré dont vous choisissez le côté. La taille de l'espace praticable
par le curseur est le nombre de carreau.

4. Les Images
Trois images sont nécessaire pour le script : une carte et deux icônes. La carte est forcément au format 640x480 (la taille de la fenêtre) mais peut
être en parti vide (dans ce cas rendez la map visible en fond). Les deux icônes sont sont des carrés dont le côté vaut trois carreaux de la carte (par
exemple si un carreau vaut 8x8, 8x3=24, l'icône fera 24x24), pensez à centrer l'icône de préférence.

5. Les Textes
Le script permet d'afficher un texte selon la position du curseur (généralement le nom du lieu), la "nomination des cases" est détaillé dans le script.
On peut choisir la couleur, la police et la taille du texte en plus de sont emplacement.

6. En Event
La localisation du héros sur la carte se fait par deux variable à déterminer en début du script, une pour X et une pour Y. Elle peuvent être définit pour
chaque map ou/et gérer comme n'importe qu'elle variable. De plus pour ouvrir la carte, il suffit d'insérer le script "$scene = Scene_Carte.new".

Conclusion
Je suis pas très bon pour les explications donc si vous n'avez pas compris quelque chose n'hésitez pas à demander des informations. Si un scripteur
plus compétent que moi veux améliorer ce script j'en serai ravi.


Last edited by Brendan75 on Wed 29 Sep - 13:44 (2010); edited 8 times in total
Back to top
Publicité






PostPosted: Tue 29 Dec - 17:06 (2009)    Post subject: Publicité

PublicitéSupprimer les publicités ?
Back to top
Alex
Ex-staff


Joined: 01 Jun 2008
Posts: 2,632
Localisation: Demain

PostPosted: Tue 29 Dec - 18:05 (2009)    Post subject: Mappemonde

Super Tuto, merci à toi Imbécile heureux
Back to top
Bilkev
Guest





PostPosted: Tue 29 Dec - 18:08 (2009)    Post subject: Mappemonde

Génial ! Mais le cadre il ets avec le script ou on doit le mettre ?
Sinon c'est quoi cette histoire quand tu marque :
Quote:
Trois images sont nécessaire pour le script : une carte et deux icônes. La carte est forcément au format 640x480 (la taille de la fenêtre) mais peut
être en parti vide (dans ce cas rendez la map visible en fond). Les deux icônes sont sont des carrés dont le côté vaut trois carreaux de la carte (par
exemple si un carreau vaut 8x8, 8x3=24, l'icône fera 24x24), pensez à centrer l'icône de préférence.

Visible en fond ?
Back to top
Brendan75
Ex-staff


Joined: 24 Mar 2008
Posts: 1,827
Localisation: Paris
Masculin

PostPosted: Tue 29 Dec - 19:01 (2009)    Post subject: Mappemonde

Voici les trois images que j'ai utilisé :

La carte avec les contours etc... au format 640x480.

Le curseur

et le point "héros"

Vu que la carte est entourée de "vide" (transparence) il faut ajouter la map en fond, c'est à dire le tileset mappé... (je sens que je ne suis pas clair ><) sinon le fond est noir autour de l'image, en gros, on laisse true ligne 31.
Back to top
Warp'
Membre


Joined: 21 Aug 2008
Posts: 1,353
Localisation: Québec

PostPosted: Tue 29 Dec - 20:18 (2009)    Post subject: Mappemonde

Je crois avoir bien suivi les instructions mais ca me donne ce log :
---------- Erreur de script : Scene_Carte ----------
----- Type
ArgumentError
----- Message
wrong number of arguments(8 for 7)
----- Position dans Scene_Carte
Ligne 209
----- Backtrace
Script : Scene_Carte | Ligne : 209 | Méthode : in `draw_text'
Script : Scene_Carte | Ligne : 209 | Méthode : in `refresh'
Script : Scene_Carte | Ligne : 125 | Méthode : in `main'
Script : Main | Ligne : 57
Back to top
Brendan75
Ex-staff


Joined: 24 Mar 2008
Posts: 1,827
Localisation: Paris
Masculin

PostPosted: Tue 29 Dec - 20:25 (2009)    Post subject: Mappemonde

J'ai fais une petite mise à jour, il n'y a donc plus de ligne 209. Réessaie et si le problème persiste post ton script. A priori c'est un problème dans le nomination des lieux.
Back to top
Masharu-Law
Membre


Joined: 20 Dec 2008
Posts: 1,006
Localisation: Lyon
ID Steam: masharu-law
Nintendo Network: masharu-law

PostPosted: Wed 30 Dec - 00:06 (2009)    Post subject: Mappemonde

Intéressant Clin d'œil foireux. Mais je m'intéresse qu'à la carte : C'est toi qui l'a fait (je parle du graphisme de la carte que tu use pour ce tuto) ? J'aimerais bien m'en inspirer Imbécile heureux.
Back to top
Visit poster’s website Skype Facebook Twitter
Sachafr
Membre


Joined: 01 Apr 2010
Posts: 119
Localisation: montreal Quebec Canada

PostPosted: Sun 14 Nov - 22:18 (2010)    Post subject: Mappemonde

Lorseque je veut commencer mon jeu sa fait ????? mini_map ??? 2 ??? Syntax erreur (mini_map c'est le nom de ton script ou j'ai changer le nom et je l'ai appeler test_carte et sa a faite ???? test_carte ??? 2 ??? syntax erreur. merci :(
Back to top
Brendan75
Ex-staff


Joined: 24 Mar 2008
Posts: 1,827
Localisation: Paris
Masculin

PostPosted: Mon 15 Nov - 07:18 (2010)    Post subject: Mappemonde

Tu me déterres un sujet là X), mais tant mieux ça fait de la pub ^^
Il y a un log ? Parce que là je ne vois pas vraiment, essaie de recopier/coller le script on ne sait jamais.
Back to top
Speed
Ex-staff


Joined: 04 Jan 2008
Posts: 1,701
Localisation: Marseille (13)
Masculin

PostPosted: Mon 15 Nov - 11:02 (2010)    Post subject: Mappemonde

Aaah ! Enfin un script qui gère une worldmap avec des carreaux de 8x8 !
Et en plus, c'est entièrement personnalisable !

Un grand merci !
Back to top
Brendan75
Ex-staff


Joined: 24 Mar 2008
Posts: 1,827
Localisation: Paris
Masculin

PostPosted: Mon 15 Nov - 15:06 (2010)    Post subject: Mappemonde

Merci Speed, mais il n'est pas nouveau du tout. X)
Back to top
Slash
Membre


Joined: 18 Jan 2008
Posts: 2,504
Localisation: MONTSURS (53)

PostPosted: Mon 15 Nov - 16:46 (2010)    Post subject: Mappemonde

script tres tres intéressant, je vait voir si je ne peut pas m'en servir de base pour afficher la position de capture dans le pokedex
je pense que via un tableau parametrable sa doit etre possible
Back to top
Suicune31
Membre


Joined: 08 Aug 2008
Posts: 1,161
Localisation: Haute-garonne (31)
Masculin

PostPosted: Mon 15 Nov - 16:53 (2010)    Post subject: Mappemonde

Slash, si tu arrive à adapter le script de Brendan pour le pokédex il sera aussi utilisable pour le pokématos de PSP DS ? :?
Back to top
Slash
Membre


Joined: 18 Jan 2008
Posts: 2,504
Localisation: MONTSURS (53)

PostPosted: Mon 15 Nov - 16:56 (2010)    Post subject: Mappemonde

ah ouais j'y avait pas penser mais c'est possible
Back to top
Epistol
Membre


Joined: 22 Jan 2010
Posts: 113
Localisation: Devant mon ordi

PostPosted: Sun 28 Aug - 21:14 (2011)    Post subject: Mappemonde

Necropost désolé ^^
Quand tu dit : Les coordonnées de la carte et des textes vous sont demandées.
Seulement, est-ce les seules coordonnées a partir du coin haut gauche ou faut-il mettre ceux de bas droite aussi ?
Si non est-ce possible ?
Back to top
Skype Facebook Twitter
Contenu Sponsorisé






PostPosted: Today at 01:07 (2019)    Post subject: Mappemonde

Back to top
Display posts from previous:   
Post new topic   Reply to topic    Pokémon Script Project Forum Index -> Game Making -> Ressources techniques -> Scripts All times are GMT + 1 Hour
Goto page: 1, 2  >
Page 1 of 2

 
Jump to:  

Index | Free forum | Free support forum | Free forums directory | Report a violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Thème par Thomas et l'équipe de la refonte PSP 2012 (version 1.0)