Sujet n°12640
Posté par Rey' le 24 Avr - 11:32 (2013)
Titre : Infinité de Tag Terrains.
Bonjour/soir à tous ! Je viens vous partager un script que j'ai trouvé et qui est fort intéressant.

L’intérêt réside dans le fait qu'il est possible avec ce script de posséder une infinité de tag, nous ne sommes donc plus limiter à 8 Tag Terrains (0 à 7).

Le script
Code:
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
# Unlimited Terrain Tags Script by Nathmatt
# Version: 1.00
# Type: Add On
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=

#  This work is protected by the following license:
# #----------------------------------------------------------------------------
# # 
# #  Creative Commons - Attribution-NonCommercial-ShareAlike 3.0 Unported
# #  ( http://creativecommons.org/licenses/by-nc-sa/3.0/ )
# # 
# #  You are free:
# # 
# #  to Share - to copy, distribute and transmit the work
# #  to Remix - to adapt the work
# # 
# #  Under the following conditions:
# # 
# #  Attribution. You must attribute the work in the manner specified by the
# #  author or licensor (but not in any way that suggests that they endorse you
# #  or your use of the work).
# # 
# #  Noncommercial. You may not use this work for commercial purposes.
# # 
# #  Share alike. If you alter, transform, or build upon this work, you may
# #  distribute the resulting work only under the same or similar license to
# #  this one.
# # 
# #  - For any reuse or distribution, you must make clear to others the license
# #    terms of this work. The best way to do this is with a link to this web
# #    page.
# # 
# #  - Any of the above conditions can be waived if you get permission from the
# #    copyright holder.
# # 
# #  - Nothing in this license impairs or restricts the author's moral rights.
# # 
# #----------------------------------------------------------------------------
#
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
# Instrutions:
#  Scroll down to the config and add terrain_tags by adding these to the config
#  module (Unlimited_Terrain_Tags.add_terrains(tileset_id,x,y,terrain_tag))
#
#   tileset_id  - is the tilsets id
#   x,y         - is the location on the tile set
#   terrain_tag - is the terrain_tag for that tile
#
# To get the x and y think of the tilset as the map and the x and y are each block
# dont count the auto tiles.
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
module Unlimited_Terrain_Tags
 
# dont touch any of this
 
  $terrains = []
 
  class Terrains
   
    attr_reader   :tileset_id,:tile_id,:terrain_tag
   
    def initialize(tileset_id,tile_id,terrain_tag)
      @tileset_id,@tile_id,@terrain_tag = tileset_id,tile_id,terrain_tag
    end
   
  end
 
  def self.get_tile_id(x,y)
    return((y*8)+x)+384
  end
 
  def self.add_terrains(tileset_id,x,y,terrain_tag)
    $terrains.push(Terrains.new(tileset_id,self.get_tile_id(x,y),terrain_tag))
  end 
 
  #============================================================================
  # MCES::Config
  #----------------------------------------------------------------------------
  #  The configuration for Unlimited Terrain Tags
  #============================================================================
  module Config
    # add terrain tags here
    #Unlimited_Terrain_Tags.add_terrains(tileset_id,x,y,terrain_tag)
  end
 
  def self.get_terrain_tag(tileset_id,tile_id)
    $terrains.each {|terrain|
    if [tileset_id,tile_id] == [terrain.tileset_id,terrain.tile_id]
      return terrain.terrain_tag
    end}
    return 0
  end
 
end
 
class Game_Map
 
  def terrain_tag(x, y)
    if @map_id != 0
      [2, 1, 0].each{|i|
      tile_id = data[x, y, i]
      if tile_id == nil
        return 0
      else
        t = Unlimited_Terrain_Tags.get_terrain_tag(@map.tileset_id,tile_id)
        return t if t > 0
        return @terrain_tags[tile_id] if @terrain_tags[tile_id] > 0
      end}
    end
    return 0
  end
 
end


Mais comment marche ce script ?

Il suffit juste d'aller à la ligne 83. Pour ajouter de nouveaux tags, il faut écrire ceci : Unlimited_Terrain_Tags.add_terrains(tileset_id,x,y,terrain_tag).
Vous pouvez en ajouter autant que vous le voulez.

Tileset_id correspond au numéro de votre tileset dans votre BDD, x et y correspondent aux carreaux verticaux et horizontaux, et terrain_tag par le tag terrain que vous voulez attribuer à ce tile.

ATTENTION : la ligne des autotiles ne comptent pas ! Il faut donc commencer à compter à partir de la 1ère ligne de votre tileset.
De plus, la première ligne et la première colonne compte pour 0.

Voilà un petit schéma explicatif, au cas ou :
Image explicative


De plus, ce script ne marche pas avec les autotiles.

Voilà, j'espère que vous avez compris, si toutefois vous n'y arrivez toujours pas, postez un message ici. Clin d'œil foireux

Posté par Pαlвσlѕку le 24 Avr - 15:15 (2013)
Tu as testé s'il était totalement compatible avec PSP ?

Sinon, c'est un script fort pratique pour ceux qui manque de tags terrains où qui en abusent.

Posté par Rey' le 24 Avr - 17:29 (2013)
Oui, j'ai oublié de le préciser, il fonctionne avec PSP. Clin d'œil foireux

Posté par M. XD le 25 Avr - 00:06 (2013)
Merci du Partage ! Imbécile heureux

Posté par Arc-Arceus le 27 Avr - 11:20 (2013)
Et comment fait-on si l'on désire affecter ces nouveaux tags aux autotiles ? 42

Posté par Nuri Yuri le 27 Avr - 11:28 (2013)
Essaie les coordonnées négatives Gros matou qui ronronne

Posté par Rey' le 27 Avr - 14:25 (2013)
C'est vrai que j'y avais pas pensé. Du coup, j'essaye la proposition de Yuri et je vous redis ça. ^^

EDIT : Non, ça ne marche pas. Faut croire que le script n'a pas été prévu pour les autotiles.

Posté par Pαlвσlѕку le 27 Avr - 17:23 (2013)
Les autotiles ne font pas parties des tilesets.
Il faudrait compléter le script pour qu'ils soient pris en compte.

Posté par Sphinx le 28 Avr - 12:09 (2013)
sisi ils font partie des tilesets Imbécile heureux

D'ailleurs, la numérotation des tile_id de chaque tileset (hors autotiles) ne commence pas à 0 ^^ Dans l'introduction de ce script j'explique comment marche le calcul du tile_id ^^ Et chaque autotile correspond en réalité à 48 tiles (les 48 formes qu'il peut adopter selon la situation)

edit : [url=./5194.html?theme=test#p108000]Explication détaillée du calcul du tileid pour les autotiles (la règle générale suit le concept expliqué dans le lien au dessus)

Posté par Pαlвσlѕку le 28 Avr - 13:47 (2013)
Ah ouais j'avais totalement oublié le fonctionnement en fait.

Posté par Arc-Arceus le 2 Mai - 14:38 (2013)
Allez, j'ai regardé le script, et en fait c'est tout bête : à la ligne 70, il faut virer le 384, qui sert juste à zapper les autotiles dans la numérotation ! x)
Après il suffit d'appliquer les règles de calcul données par Sphinx et le compte est bon ! ça marche impec' chez moi, et c'est très utile. Gros matou qui ronronne

Posté par Rey' le 2 Mai - 16:13 (2013)
Content que ce script plaise à tout le monde. :D
Je savais bien que faire une recherche pour les Tags Terrains serait pratique.

Posté par Sphinx le 7 Mai - 06:48 (2013)
Arc-Arceus a écrit:
Après il suffit d'appliquer les règles de calcul données par Sphinx et le compte est bon ! ça marche impec' chez moi, et c'est très utile. Gros matou qui ronronne

Normal qu'elles marchent, elles ont été appliquées à plus de 5.000 années de construction de pyramides ^^

Plus sérieusement, j'avais été obligé de creuser la question à cause de mon autre script, donc autant que mes recherches servent à nouveau si elles le peuvent :p