[Ace] – Mode 7 Ace Addon : Map Rotation

Voici une petite extension pour le script Mode 7 Ace. Cette extension ajoute seulement la possibilité de faire effectuer une rotation à la carte. Comme cela peut théoriquement avoir des répercussions négatives sur les performances, il est inutile d’ajouter ce script s’il n’y en a pas besoin.
 
Cette extension requiert deux composants :

  • un script
  • un fichier DLL spécifique

Lien de téléchargement du script Mode 7 Ace avec toutes ses extensions (dont celle-ci) ICI).
 

[Ace] – Mode 7 Ace

Il s’agit d’un script de mode 7 basique pour RMVX Ace.

  • Permet une inclinaison de la carte de 0° à 89°.
  • Toute la carte est inclinée, sans relief. Seuls les évènements paraissent dressés verticalement.
  • L’effet de colorisation à l’horizon est personnalisable.
  • Les tiles animés sont supportés, ainsi que le bouclage de la carte.
  • possibilité de zoomer (de 1:8 à 8:1) quand le mode 7 est activé.

Ce que cela donne en vidéo :

Nécessite :

  • le fichier MGC_Mode7_Ace_1_9.dll à la racine du projet
  • les 3 fichiers graphiques suivants, déposés dans Pictures/ :
    • autotiles_data.png
    • autotiles_data_small.png
    • autotiles_data_xsmall.png

Configuration :

  • MODE7_MAPS_ID : Contient la liste des id des cartes pour lesquelles le mode 7 est appliqué dès l’entrée sur ces cartes
  • MODE7_DEFAULT_ZOOM : valeur de zoom par défaut qui s’applique dès le passage en mode 7. Compris entre 0.125 et 8.0.
  • MODE7_DEFAULT_ANGLE : valeur d’angle d’inclinaison par défaut qui s’applique dès le passage en mode 7. Compris entre 0 et 89.
  • MODE7_VIEW_LIMIT : nombre de tiles supplémentaires à afficher (en plus des 13 pour la vue normale de la carte en 544 * 416) avant l’horizon.
  • MODE7_FADING_DISTANCE : nombre de tiles avant l’horizon subissant un dégradé de ton et/ou d’opacité.
  • MODE7_FADING_TONE : composantes de couleur R, G, B vers lesquelles tend le dégradé de ton à l’horizon. Chaque composantes peut varier entre -255 et 255.
  • MODE7_FADING_OPACITY : opacité vers laquelle tend le dégradé d’opacité ton à l’horizon. Compris entre 255 (pas de dégradé d’opacité) et 0.
  • MODE7_SCAN_STEP : spécifie la méthode de rafraîchissement de l’écran :
    • 1 : l’écran est entièrement redessiné en 1 frame. Déconseillé car extrêmement gourmand en ressources.
    • 2 : l’écran est redessiné en 2 frames (une ligne de l’écran sur deux est dessinée pour chaque frame).
    • 3 : l’écran est redessiné en 3 frames (une ligne de l’écran sur trois est dessinée pour chaque frame). Conseillé s’il y a trop de lag.
  • MODE7_TERRAIN_TAGS : liste de valeurs de terrain tags pour lesquelles les tiles doivent être dessinés verticalement en mode 7. Si le paramètre MODE7_VERTICAL_TILES_TYPE n’a pas sa valeur égale à 0, utiliser plusieurs valeurs permet de séparer des regroupements de tiles contigus.
  • MODE7_VERTICAL_TILES_TYPE : méthode de regroupement des tiles contigus :
    • 0 : aucun regroupement des tiles verticaux même si des tiles voisins ont le même terrain tag. Pour un tile avec un terrain tag configuré pour être dessiné verticalement, un sprite de dimensions 32*32 est créé. A priori aucun intérêt sans la rotation, car aura le même effet que la valeur 2 mais avec plus de sprites à l’écran, donc plus de ralentissements.
    • 1 : regroupement des tiles verticaux contigus sur la même colonne ayant le même terrain tag. Un sprite est créé par regroupement, le tile le plus bas du regroupement servant de base au sprite. A priori aucun intérêt sans la rotation, car aura le même effet que la valeur 3 mais avec plus de sprites à afficher.
    • 2 : regroupement des tiles verticaux contigus sur la même ligne ayant le même terrain tag. Un sprite est créé par regroupement, l’origine horizontale étant fixée au milieu du regroupement.
    • 3 : regroupement des tiles verticaux contigus ayant le même terrain tag, quelle que soit la ligne ou la colonne. Un sprite est créé par regroupement, le tile le plus bas du regroupement servant de base au sprite et l’origine horizontale étant fixée au milieu du regroupement. Valeur par défaut.
  • MODE7_ALWAYS_DRAW_TILES_ON_MAP : méthode de regroupement des tiles contigus :
    • 0 : les tiles verticaux ne sont pas dessinés couchés sur la carte. Valeur par défaut.
    • 1 : les tiles verticaux sont également dessinés couchés sur la carte.
  • MODE7_PARALLAXED_MAPS_ID : Contient la liste des id des cartes en mode 7 pour lesquelles le panorama est utilisé en tant que couche inférieure. Vous pouvez utiliser un second panorama pour le fond, il faut ajouter dans les notes de la carte le texte suivant : [m7a_pano:nom_du_fichier]

Utilisation :
Voici les commandes en script utilisables (par exemple dans une commande d’évènement en utilisant Script…) :

  • MGC.start_mode7 : pour lancer le mode 7
  • MGC.to_mode7_angle(nouvel angle, durée de transition)
  • MGC.to_mode7_zoom(nouvelle valeur de zoom, durée de transition)
  • MGC.to_map_zoom(nouvelle valeur de zoom, durée de la transition) : pour mettre fin au mode 7
  • MGC.set_mode7_scan(nouvelle valeur) : pour modifier le paramètre MODE7_SCAN_STEP

Il est possible (V.1.3) d’ajouter des paramètres de mode 7 dans le nom des cartes. Ces paramètres sont prioritaires par rapport à ceux dans la partie CONFIGURATION du script. Cela permet de passer d’une carte en mode 7 à une autre en ayant par exemple un angle et un dégradé de ton à l’horizon différents.
Les ajouts possibles dans le nom d’une carte sont :

  • [M7] : active le mode 7 pour la carte (même effet que si l’identifiant de la carte est dans MODE7_MAPS_ID
  • [Ax], où x est un entier entre 0 et 89 : angle de la carte. Ex. : Worldmap[A30]
  • [Zx], où x est un décimal entre 0.125 et 8.0 : zoom de la carte. Ex. : Worldmap[Z1.5]
  • [FDx], où x est un entier positif : nombre de tiles avant l’horizon subissant un dégradé de ton et/ou d’opacité. Ex. : Worldmap[FD16]
  • [FTx,y,z], où x, y et z sont des entiers entre -255 et 255 : composantes de couleur R, G, B vers lesquelles tend le dégradé de ton à l’horizon. Ex. : Worldmap[FT128,-64,0]
  • [FOx], où x est un entier 0 et 255 : opacité vers laquelle tend le dégradé d’opacité ton à l’horizon. Ex. : Worldmap[FO64]
  • [P] : le panorama est utilisé en tant que couche inférieure de la carte.

Télécharger la démo contenant le script (V.1.9)

IMPORTANT : SI VOUS RENCONTREZ DU LAG, VEUILLEZ VOUS ASSURER D’AVOIR DÉCOCHER L’OPTION “REDUCE SCREEN FLICKERING” (F1).

Tous les addons disponibles sont également inclus dans la démo
Cette extension permet le déclenchement automatique du mode 7 dès que le joueur embarque sur le vaisseau.

ALTERNATIVE A CE SCRIPT
木星ペンギン a créé un script ayant également un rendu Mode 7, qui gère la rotation de la carte, et qui ne nécessite pas de fichier DLL supplémentaire. Vous pourrez trouver ce script à cette adresse :
http://woodpenguin.web.fc2.com/rgss3/vehicle3D.html

[Ace] – Map Zoom Ace Addon

Ceci est un add-on au script Map Zoom Ace, permettant de zoomer sur une position précise de la carte, ou sur un évènement.
 
Installation :
Cet add-on nécessite le script Map Zoom Ace en V.1.1, placé
directement au-dessus de ce script.
 
Utilisation :
Deux commandes en script sont utilisables :

  • Zoom sur une position de la carte :
    MGC.zoom_on_position(abscisse, ordonnée, nouvelle valeur de zoom, durée de la transition)
    L’abscisse (coordonnée horizontale) et l’ordonnée (coordonnée verticale) sont exprimées en carreaux (tiles)
  • Zoom sur un évènement dans la carte :
    MGC.zoom_on_event(identifiant de l'évènement, nouvelle valeur de zoom, durée de la transition)

La commande existante MGC.to_map_zoom(nouvelle valeur de zoom, durée de la transition) recentre systématiquement la carte sur le joueur.
 
Script :

#====================================================================
# Map Zoom Ace Addon
# v.1.0
# Auteur : MGC
#
# Permet de zoomer sur une position de la carte, ou sur un évènement.
#
# Nécessite :
# - le script "Map Zoom Ace" du même auteur en V.1.1, placé
#   directement au-dessus de ce script
#
# Utilisation :
# - au sujet de commande existante :
#   MGC.to_map_zoom(nouvelle valeur de zoom, durée de la transition)
#   Cette commande centre systématiquement la vue sur le joueur.
# - nouvelle commande pour zoomer sur une position de la carte
#   MGC.zoom_on_position(abscisse, ordonnée, nouvelle valeur de zoom, durée de la transition)
#   L'abscisse (x) et l'ordonnée (y) sont exprimées en tiles.
# - nouvelle commande pour zoomer sur un évènement
#   MGC.zoom_on_event(identifiant de l'évènement, nouvelle valeur de zoom, durée de la transition)
#====================================================================
module MGC
  #--------------------------------------------------------------------------
  # * Pour zoomer sur une position (valeurs en tiles)
  #--------------------------------------------------------------------------
  def self.zoom_on_position(pos_x, pos_y, new_zoom, duration)
    @pos_x = pos_x
    @pos_y = pos_y
    @free_camera = true
    self.process_to_map_zoom(new_zoom, duration)
  end
  #--------------------------------------------------------------------------
  # * Pour zoomer sur un évènement
  #--------------------------------------------------------------------------
  def self.zoom_on_event(event_id, new_zoom, duration)
    event = $game_map.events[event_id]
    @pos_x = event.x
    @pos_y = event.y
    @free_camera = true
    self.process_to_map_zoom(new_zoom, duration)
  end
  #--------------------------------------------------------------------------
  # * Pour aller progressivement vers une nouvelle valeur de zoom
  #--------------------------------------------------------------------------
  def self.to_map_zoom(new_zoom, duration)
    if @free_camera
      @free_camera = false
      if map_zoom == new_zoom
        $game_player.center($game_player.x, $game_player.y)
        @force_map_update = true
      end
    end
    self.process_to_map_zoom(new_zoom, duration)
  end
  #--------------------------------------------------------------------------
  # * Setter pour l'attribut zoom
  #--------------------------------------------------------------------------
  def self.map_zoom=(zoom_value)
    unless map_zoom == zoom_value
      if zoom_value < 0.125 || zoom_value > 8.0 then return end
      @zoom = zoom_value
      $game_system.map_zoom = @zoom
      if @free_camera
        $game_map.set_display_pos(@pos_x - (Graphics.width / 32 - 1) / 2.0,
        @pos_y - (Graphics.height / 32 - 1) / 2.0)
      else
        $game_player.center($game_player.x, $game_player.y)
      end
    end
  end 
  #--------------------------------------------------------------------------
  # * Pour aller progressivement vers une nouvelle valeur de zoom,
  # sans centrage automatique sur le joueur
  #--------------------------------------------------------------------------
  def self.process_to_map_zoom(new_zoom, duration)
    unless map_zoom == new_zoom
      if new_zoom < 0.125 || new_zoom > 8.0 then return end
      @map_zoom_duration = duration
      target_zoom_incr = Math.log(new_zoom) / Math.log(2)
      @map_zoom_step = (target_zoom_incr - @map_zoom_incr) / duration
      @target_map_zoom = new_zoom
    end
  end
  #--------------------------------------------------------------------------
  # * Setter pour l'attribut force_map_update
  #--------------------------------------------------------------------------
  def self.force_map_update=(flag)
    @force_map_update = flag
  end
  #--------------------------------------------------------------------------
  # * Getter pour l'attribut force_map_update
  #--------------------------------------------------------------------------
  def self.force_map_update
    return @force_map_update
  end
  #--------------------------------------------------------------------------
  # ** Tilemap
  #--------------------------------------------------------------------------
  class Tilemap
    #--------------------------------------------------------------------------
    # * Aliased methods
    #--------------------------------------------------------------------------
    unless @already_aliased_mgc_zoom_addon
      alias update_map_zoom_addon update
      @already_aliased_mgc_zoom_addon = true
    end
    #--------------------------------------------------------------------------
    # * Mise à jour, appelée normalement à chaque frame
    #--------------------------------------------------------------------------
    def update
      if @visible && MGC.force_map_update
        @need_refresh = true
        @refresh_all = true
        MGC.force_map_update = false
      end
      update_map_zoom_addon
    end
  end
end

[Ace] – Map Zoom Ace (zoom de la carte)

Exemple avec un zoom à 50%

Ce script pour RMVX Ace permet de jouer avec une carte zoomée. Le coefficient de zoom peut aller de 1:8 à 8:1.


Installation :
Ce script nécessite le script MGC Tilemap Ace en V.1.4 minimum, placé
directement au-dessus de ce script. Se référer à l’article dédié pour connaître l’ensemble des composants nécessaire à son fonctionnement.

Utilisation :
Pour une carte utilisant la tilemap du script MGC Tilemap Ace, deux commandes en script sont utilisables :

  • MGC.map_zoom=(nouvelle valeur de zoom)
  • MGC.to_map_zoom(nouvelle valeur de zoom, durée de la transition)

Configuration :
PARALLAX_ZOOM : alimenté à true ou false. Positionné à false par défaut car il semble que pour les valeurs de zoom inférieures à 1.0 cela introduit du lag

  • true : le panorama subi le même zoom que la carte
  • false : le panorama est insensible au zoom de la carte

DEFAULT_ZOOM : valeur de zoom par défaut qui s’applique à chaque entrée dans une carte supportant le zoom. Compris entre 0.125 et 8.0.

Vous pouvez ajouter une commande dans le nom des cartes pour forcer le la valeur du zoom à l’entrée dans cette carte, prioritaire par rapport à DEFAULT_ZOOM.
[Zx] : où x est un décimal entre 0.125 et 8.0 : zoom de la carte
Exemple : My Worldmap[Z0.5]

Télécharger la démo contenant le script (V1.6 – EDIT 19/08/2013)

Un add-on (inclus dans la démo à partir de la version 1.5) est diponible ici.