Canalblog
Editer l'article Suivre ce blog Administration + Créer mon blog
Publicité
Ressourcez votre RPG !
Ressourcez votre RPG !
  • Partage de ressources graphiques pour Rpg maker VX, customisées ou créées par Vincentmhd. Utilisation libre (si non commerciale) quand c'est signalé, nécéssité de citer l'auteur avec un lien vers la gallerie...
  • Accueil du blog
  • Créer un blog avec CanalBlog
Publicité
Newsletter
3 septembre 2009

Mouvements Aléatoires Restreints

Mouvements aléatoires restreints



-Introduction

J'avais déjà tenté quelque chose du genre lors du concours des 5 thèmes. Cependant en event, c'est assez moche à faire! Maintenant que je script, je vous donne mon petit script correspondant. Il est tout petit, tout mimi! ^^


-Description

Ce script permet de laisser un event libre de ses mouvements, tout en le gardant dans une zone confinée. Parfois par logique ou seulement par nécéssité, il normal de vouloir éviter qu'un event vienne s'incruster dans un endroit inapproprié de la map. Ou juste pour faire moins désordre.


-Le script

Code:

#==============================================================================
#
#
#                            Mvt Aléa Limité.v2
#
#
#===============================================================================
#
#By Vincentmhd
#http://vincentmhdmaker.canalblog.com/
#
#01/09/2009
#25/09/2009 .v2 ajout des zones relatives...
#
#
#
#=====================================NOTE======================================
#
#
#-------------------------------------------------------------------------------
#
#Ce script permet de mettre un event en déplacement aléatoire sans pour autant
#le lâcher sur toute la carte, il est limité à un rectangle sur la map défini
#par vos soins.
#Pour le faire, il y a 2 méthodes: par coordonnées absolues et par relatives
#
#Pour les absolues c'est simple: il suffit d'inserer:
#move_random_in(bottom, left, right, top)
#Les arguments correspondent directement aux coordonnées de l'espace marchage
#sur la map.
#
#Pour les relatives: il faut d'inserer:
#-move_random_around(bottom, left, right, top)
#Les arguments correspondent directement aux coordonnées de l'espace marchable
#par rapport à la position "initiale". Celle-ci peut être réinitialisée,
#manuellement, et automatiquement.
#La méthode manuelle est la suivante: Set_center( x, y)
#La méthode automatique est activée par défaut, elle s'active et se désactive
#comme ceci:
#Set_follow(bool)
#Automatisme consiste à appeler Set_center(), dès que l'event est déplacé
#artifitiellement.
#===============================================================================
class Game_Character

  attr_accessor :init_x, :init_y, :init_move
 
  alias alea_initialize initialize
  def initialize
    @init_move = true
    alea_initialize
    @init_x = 0
    @init_y = 0
  end
   
 
  #--------------------------------------------------------------------------
  # * Move at Random in map coord
  #--------------------------------------------------------------------------
  def move_random_in(bottom, left, right, top)
    case rand(4)
    when 0
      if !(@y+1 > bottom)
        move_down(false)
      end
    when 1 
      if !(@x-1 < left)
        move_left(false)
      end
    when 2
      if !(@x+1 > right)
        move_right(false)
      end
    when 3
      if !(@y-1 < top)
        move_up(false)
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Move at Random in relative rect centre sur l'event
  #--------------------------------------------------------------------------
  #Cette méthode est variante de la première elle permet de
  #délimiter le rectangle relativement.
  #Ce rectangle est centré sur la position initiale du perso.
  def move_random_around(bottom, left, right, top)
    if (@init_move!= nil)&&(@init_move == true)
      Set_center()
      @init_move = false
    end
    case rand(4)
    when 0
      if !(@y+1 > (@init_y + bottom))
        move_down(false)
      end
    when 1 
      if !(@x-1 < (@init_x - left))
        move_left(false)
      end
    when 2
      if !(@x+1 > (@init_x + right))
        move_right(false)
      end
    when 3
      if !(@y-1 < (@init_y - top))
        move_up(false)
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Change the center of the square
  #--------------------------------------------------------------------------
  #Cette méthode permet de modifier le centre du rectangle.
  def Set_center( x =@x, y =@y)
      @init_x = x
      @init_y = y
      if @init_move != nil
        @init_move = false
      end
  end
  #--------------------------------------------------------------------------
  # * Move Type : Custom
  #--------------------------------------------------------------------------
  #Permet de faire suivre le rect si le perso est déplacé artificiellement
  alias alea_move_type_custom move_type_custom
  def move_type_custom
    if stopping?
      command = @move_route.list[@move_route_index] 
      @move_failed = false
      if command.code != 0
        if (command.code < 14)&&(@init_move != nil)
          @init_move = true
        end
      end
      alea_move_type_custom
    end
  end
  #--------------------------------------------------------------------------
  #
  #--------------------------------------------------------------------------
  #Permet de faire dire si le rect doit suivre le perso si il est déplacé
  #artifitiellement
  def Set_follow(bool)
    if bool
      @init_move = true
    else
      @init_move = nil
    end
  end
end


class Game_Event
  #--------------------------------------------------------------------------
  # * Object Initialization
  #    map_id : map ID
  #    event  : event (RPG::Event)
  #--------------------------------------------------------------------------
  alias alea_event_initialize initialize
  def initialize(map_id, event)
    alea_event_initialize(map_id, event)
    Set_center()
  end
end




-Installation

Ce script n'échappe pas à la régle du "copiez en dessous de material".
Il n'a pas de nécéssité particulière.
Compatibilité optimale, puis que ce n'est que l'ajout d'une méthode...

-Utilisation

Tout les appels de script qui suivent se font dans la commande "déplacer un événement/ un héros".
Il y a 2 méthodes: la méthode utilisant les coordonnées absolues, et l'autre les relatives.

Coordonnées Absolues
Il suffit d'appeler un script dans la trajectoire à définir par votre personnage:
-move_random_in(bottom, left, right, top)
La zone est rectangulaire. Bottom, left, right, top correspondent aux coordonnées sur la map des côtés du rectangle, respectivement, le bas, la gauche, la droite, puis le haut.

Un screen:




Coordonnées Relatives
il faut d'inserer comme pour la méthode absolue:
-move_random_around(bottom, left, right, top)
Les arguments correspondent aux coordonnées de l'espace marchable par rapport à la position "initiale" de l'event.
Elle prend que des entiers positifs.
Par exemple move_random_around(1, 1, 1, 1)
Laissera un event libre dans un carré de 3 côtés par rapport à sa position initiale.
Celle-ci peut être réinitialisée, manuellement, et automatiquement, au cas où vous avez besoin de déplacer l'event.
La méthode manuelle est la suivante: Set_center( x, y)
La méthode automatique est activée par défaut, elle s'active et se désactive comme ceci: Set_follow(bool)
L'automatisme consiste à appeler Set_center(), dès que l'event est déplacé.


-Démo

Une toute petite démo: Démo

-Crédit: Vincentmhd


[Edit: 3Sept2009] : ajout du crédit et ajout d'explications
[Edit: 26Sept2009] :v2 ajout de la méthode relative
_________________


Publicité
Commentaires
Publicité