RMRK is retiring.
Registration is disabled. The site will remain online, but eventually become a read-only archive. More information.

RMRK.net has nothing to do with Blockchains, Cryptocurrency or NFTs. We have been around since the early 2000s, but there is a new group using the RMRK name that deals with those things. We have nothing to do with them.
NFTs are a scam, and if somebody is trying to persuade you to buy or invest in crypto/blockchain/NFT content, please turn them down and save your money. See this video for more information.
[XP] Tileset Merger

0 Members and 2 Guests are viewing this topic.

***
Rep:
Level 84
Yes, hoh my gawd!
Tileset Merger
Authors: game_guy
Version: 1.0
Type: Tileset Merger
Key Term: Misc System

Introduction

Ever needed a few tilesets merged for mapping? This script will merge any tilesets for you into one!

Features

  • Merges any amount of tilesets into one tileset!

Screenshots

Video

Demo

http://www.sendspace.com/file/ufkvn9

Script

Spoiler for:
Code: [Select]
#===============================================================================
# Tileset Merger
# Version 1.0
# Author game_guy
#-------------------------------------------------------------------------------
# Intro:
# Ever needed a few tilesets merged for mapping? This script will merge any
# tileset for you into one!
#
# Features:
# Merges any amount of tilesets into one tileset!
#
# Instructions:
# Import any tileset into the Tilesets folder that you want merged together.
# Then run the game and it'll merge it for you.
# Make sure all the tilesets have the same background color.
#
# Credits:
# game_guy ~ making it
# Fantasist ~ giving me a neat piece of code
# 66rpg ~ Bitmap to Png code
# GAX72 ~ Requesting merged tilesets
#===============================================================================

=begin
==============================================================================
                        Bitmap to PNG By ???
==============================================================================

 ?Bitmap??????
 
 bitmap_obj.make_png(name[, path])
 
 name:?????
 path:????

 ??66??????????????
  
==============================================================================
=end

module Zlib
  class Png_File < GzipWriter
    #--------------------------------------------------------------------------
    # ? ???
    #--------------------------------------------------------------------------
    def make_png(bitmap_Fx,mode)
      @mode = mode
      @bitmap_Fx = bitmap_Fx
      self.write(make_header)
      self.write(make_ihdr)
      self.write(make_idat)
      self.write(make_iend)
    end
    #--------------------------------------------------------------------------
    # ? PNG??????
    #--------------------------------------------------------------------------
    def make_header
      return [0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a].pack("C*")
    end
    #--------------------------------------------------------------------------
    # ? PNG????????(IHDR)
    #--------------------------------------------------------------------------
    def make_ihdr
      ih_size = [13].pack("N")
      ih_sign = "IHDR"
      ih_width = [@bitmap_Fx.width].pack("N")
      ih_height = [@bitmap_Fx.height].pack("N")
      ih_bit_depth = [8].pack("C")
      ih_color_type = [6].pack("C")
      ih_compression_method = [0].pack("C")
      ih_filter_method = [0].pack("C")
      ih_interlace_method = [0].pack("C")
      string = ih_sign + ih_width + ih_height + ih_bit_depth + ih_color_type +
               ih_compression_method + ih_filter_method + ih_interlace_method
      ih_crc = [Zlib.crc32(string)].pack("N")
      return ih_size + string + ih_crc
    end
    #--------------------------------------------------------------------------
    # ? ??????(IDAT)
    #--------------------------------------------------------------------------
    def make_idat
      header = "\x49\x44\x41\x54"
      case @mode # ?54~
      when 1
        data = make_bitmap_data#1
      else
        data = make_bitmap_data
      end
      data = Zlib::Deflate.deflate(data, 8)
      crc = [Zlib.crc32(header + data)].pack("N")
      size = [data.length].pack("N")
      return size + header + data + crc
    end
    #--------------------------------------------------------------------------
    # ? ?Bitmap????????? mode 1(?54~)
    #--------------------------------------------------------------------------
    def make_bitmap_data1
      w = @bitmap_Fx.width
      h = @bitmap_Fx.height
      data = []
      for y in 0...h
        data.push(0)
        for x in 0...w
          color = @bitmap_Fx.get_pixel(x, y)
          red = color.red
          green = color.green
          blue = color.blue
          alpha = color.alpha
          data.push(red)
          data.push(green)
          data.push(blue)
          data.push(alpha)
        end
      end
      return data.pack("C*")
    end
    #--------------------------------------------------------------------------
    # ? ?Bitmap????????? mode 0
    #--------------------------------------------------------------------------
    def make_bitmap_data
      gz = Zlib::GzipWriter.open('hoge.gz')
      t_Fx = 0
      w = @bitmap_Fx.width
      h = @bitmap_Fx.height
      data = []
      for y in 0...h
        data.push(0)
        for x in 0...w
          t_Fx += 1
          if t_Fx % 10000 == 0
            Graphics.update
          end
          if t_Fx % 100000 == 0
            s = data.pack("C*")
            gz.write(s)
            data.clear
            #GC.start
          end
          color = @bitmap_Fx.get_pixel(x, y)
          red = color.red
          green = color.green
          blue = color.blue
          alpha = color.alpha
          data.push(red)
          data.push(green)
          data.push(blue)
          data.push(alpha)
        end
      end
      s = data.pack("C*")
      gz.write(s)
      gz.close    
      data.clear
      gz = Zlib::GzipReader.open('hoge.gz')
      data = gz.read
      gz.close
      File.delete('hoge.gz')
      return data
    end
    #--------------------------------------------------------------------------
    # ? PNG??????(IEND)
    #--------------------------------------------------------------------------
    def make_iend
      ie_size = [0].pack("N")
      ie_sign = "IEND"
      ie_crc = [Zlib.crc32(ie_sign)].pack("N")
      return ie_size + ie_sign + ie_crc
    end
  end
end
#==============================================================================
# ? Bitmap
#------------------------------------------------------------------------------
# ????Bitmap?
#==============================================================================
class Bitmap
  #--------------------------------------------------------------------------
  # ? ??
  #--------------------------------------------------------------------------
  def make_png(name="like", path="",mode=0)
    make_dir(path) if path != ""
    Zlib::Png_File.open("temp.gz") {|gz|
      gz.make_png(self,mode)
    }
    Zlib::GzipReader.open("temp.gz") {|gz|
      $read = gz.read
    }
    f = File.open(path + name + ".png","wb")
    f.write($read)
    f.close
    File.delete('temp.gz')
    end
  #--------------------------------------------------------------------------
  # ? ??????
  #--------------------------------------------------------------------------
  def make_dir(path)
    dir = path.split("/")
    for i in 0...dir.size
      unless dir == "."
        add_dir = dir[0..i].join("/")
        begin
          Dir.mkdir(add_dir)
        rescue
        end
      end
    end
  end
end
begin
  @time = Time.now
  @height = 0
  @names = []
  dir = Dir.new('Graphics/Tilesets/')
  dir.entries.each {|file| next unless file.include?('.png')
  @names.push(file); RPG::Cache.tileset(file)}
  for i in 0...@names.size
    @tile = RPG::Cache.tileset(@names[i])
    @height += @tile.height
  end
  @bitmap = Bitmap.new(256, @height)
  @height = 0
  for i in 0...@names.size
    @tile = RPG::Cache.tileset(@names[i])
    @rect = Rect.new(0, 0, @tile.width, @tile.height)
    @bitmap.blt(0, @height, @tile, @rect)
    @height += @tile.height
  end
  @bitmap.make_png("MergedTile")
  print "Merged #{@names.size} tilesets together in \n#{Time.now - @time} seconds."
  exit
end

Instructions

Import any tileset into the Tilesets folder that you want merged together.
Then run the game and it'll merge it for you.
Make sure all the tilesets have the same background color.
Merged tilesets will appear in the root of the game folder.

Compatibility

Should work with anything
Not tested with SDK

Credits and Thanks

  • game_guy ~ for making it
  • Fantasist ~ giving me a neat piece of code
  • 66rpg ~ BitmapToPng code
  • GAX72 ~ requesting a few merged tilesets

Author's Notes

Give credits and enjoy!

***
Rep:
Level 84
Yes, hoh my gawd!
Yea it supports transparency, the blue bg is my transparency color I changed it.

*
Rep:
Level 97
2014 Most Unsung Member2014 Best RPG Maker User - Engine2013 Best RPG Maker User (Scripting)2012 Most Mature Member2012 Favorite Staff Member2012 Best RPG Maker User (Scripting)2012 Best MemberSecret Santa 2012 ParticipantProject of the Month winner for July 20092011 Best Use of Avatar and Signature Space2011 Best RPG Maker User (Scripting)2011 Most Mature Member2011 Favourite Staff Member2011 Best Veteran2010 Most Mature Member2010 Favourite Staff Member
Cool - great work, game_guy

**
Rep: +0/-0Level 82
Ello, this is my first time using this site, I mean I used it before for scripts but never posted on anything, anyways, I just used the tileset merger, great stuff, just one thing bugs me, if you take all 50 tilesets that come with rpgxp, they merge great but when your going down Through to use any of the ones on the bottom it freezes and sends you back up to the top, u gotta stop half way Through and slowly use the wheel on the mouse and hope it doesn't send u back up again also sometimes it says "script hanging", besides that i love it, i think I'm using a few other scripts of yours also, except maybe a bank, i had to use a Spanish bank script and just make the words that show in-game English lol

****
kikiki
Rep:
Level 84
Hi
I'm trying this out tommorow
Hi

**
Rep: +0/-0Level 82
Ah, well, at least it works X]