Хорошо! Хорошо!:  0
Плохо! Плохо!:  0
Показано с 1 по 5 из 5

Тема: Swap Tilesets

  1. #1
    Маститый Аватар для The Joker
    Информация о пользователе
    Регистрация
    16.06.2008
    Сообщений
    1,209
    Записей в дневнике
    11
    Репутация: 29 Добавить или отнять репутацию

    По умолчанию Swap Tilesets

    Swap Tilesets
    By BulletXt

    Описание:

    Этот скрипт позволяет вам:
    1. Менять наборы тайлов в любой момент
    2. Сменить один или несколько тайлсетов
    3. Загружать другую таблицы проходимостей в любой момент.

    Скрипт:
    Код:
    =begin
                        Swap Tileset with new passage setting
    
    Версия: 0.4
    Автор: BulletXt (bulletxt@gmail.com)
    Перевод: The Joker
    Дата: 13/06/2009
    
    Этот скрипт позволяет вам:
    
    a) Менять наборы тайлов в любой момент
    b) сменить один или несколько тайлсетов
    c) загружать другую таблицы проходимостей в любой момент
    
    Как это работает:
    Создайте папку "extra_tiles" в Graphics/System. Поместите туда дополнительные
    тайлсеты. Вы можете давать им имена по своему усмотрению. Прежде чем перемещать
    игрока на другую локацию, просто вызовите скрипт внутри события таким образом:
    $tileA1 = "fileName"
    
    Вместо "fileName" впишите имя того тайлсета, на который вы хотите произвести
    смену. В этом примере изменен тайлсет A1. Вы можете менять один или же несколько
    тайлсетов сразу. Пример ниже меняет тайлсеты A1, A4 и E:
    $tileA1 = "fileName"
    $tileA4 = "fileName"
    $tileE = "fileName"
    
    
    Сразу после выполнения скрипта внутри события, включите переключатель SWAP_TILE
    (номер переключателя можно отредактировать ниже). Чтобы вернуться к стандартному
    тайлсету локации, просто выключите этот переключатель.
    
    
    Вы также можете загрузить таблицу проходимости, отличную от оригинальной. Просто
    откройте новый проект, скопируйте тайлсеты и выставьте проходимость так, как вам
    угодно, сохраните и закройте проект. В папке Data только что созданного проекта
    скопируйте файл System.rvdata. Вставьте этот файл в ваш проект в директорию
    "extra_tiles" в Graphics\System и переименуйте его ка вам угодно. Убедитесь, что
    расширение файла - ".rvdata"
    Пример: System.rvdata переименован в:  pub.rvdata
    
    Таблица проходимости загружается также, как и тайлсеты. Это значит, что сначала
    выполнить скрипт внутри события, а затем включить переключатель 
    LOAD_PASSAGE_SETTING (номер переключателя можно отредактировать ниже). Вы можете
    загрузить таблицу проходимости без смены тайлсетов. Эти две вещи совершенно не
    зависят друг от друга.
    Скрипт для загрузки таблицы проходимости выглядит следующим образом:
    $swap_passages = "filePassage"
    Вместо filePassage впишите имя необходимой таблицы проходимости.
    
    
    Просто выключив оба переключателя, вы автоматически смените таблицу проходимости
    и все тайлсеты на стандартные.
    Если вы хотите переместить игрокаи сохранить все измененные тайлсеты, и хотите
    загрузить стандартный тайлсет A3, просто выполните скрипт такого рода:
    
    $tileA3 = nil
    
    Для такого же результата с таблицей проходимости:
    
    $swap_passages = nil
    
    Это изменит вашу таблицу на стандартную таблицу проходимости.
    
    
    Трюки:
    
    - Вы можете создать специалльный эффект, как в демо-версиию.
      Например, вы можете сделать смену тайлсетов без перехода на локацию.
      Для наглядности вы можете сделать смену тайла стены в реальном времени.
      Для этого сделайте все для стандартной смены тайлсетов (скрипт + свитч ВКЛ),
      затем сразу после этого выполните скрипт внутри эвента: $game_map.tileset.
      Этот скрипт перезагружает карту (экран замирает на 30 милисекунд), и у стены
      будет уже совсем другой тайл. Также можно работать и с таблицей проходимости:
      скрипт + свитч ВКЛ, затем скрипт $game_map.tileset, и к карте будет применена
      загруженная таблица проходимости.
      
    =end
    
    
    ############################# КОНФИГУРАЦИЯ #####################################
    
    # Это номер (ID) переключателя, вызывающего систему смены тайлсетов. Он исполь-
    # зуется для смены/восстановления тайлсетов. ОН НЕ МЕНЯЕТ ТАБЛИЦУ ПРОХОДИМОСТИ!
    # Убедитесь, что включаете переключатель перед вызовом скрипта (как сказано выше)
    SWAP_TILE = 1
    
    # Это номер (ID) переключателя, вызывающего систему загрузки таблицы проходимости.
    # Он используется для загрузки восстановления таблицы проходжимости. ОН НЕ МЕНЯЕТ
    # ТАЙЛСЕТЫ!
    # Убедитесь, что включаете переключаетль перед вызовом скрипта (как сказано выше).
    LOAD_PASSAGE_SETTING = 2
    
    
    ########################## КОНЕЦ КОНФИГУРАЦИИ ##################################
    
    
    #==============================================================================
    # ** Cache
    
    module Cache_Swap_Tiles
     
      #--------------------------------------------------------------------------
      # * Get Character Graphic
      #     filename : Filename
      #--------------------------------------------------------------------------
      def self.swap(filename)
        load_bitmap("Graphics/System/extra_tiles/", filename)
      end
      
      #--------------------------------------------------------------------------
      # * Clear Cache
      #--------------------------------------------------------------------------
      def self.clear
        @cache = {} if @cache == nil
        @cache.clear
        GC.start
      end
      #--------------------------------------------------------------------------
      # * Load Bitmap
      #--------------------------------------------------------------------------
      def self.load_bitmap(folder_name, filename, hue = 0)
        @cache = {} if @cache == nil
        path = folder_name + filename
        if not @cache.include?(path) or @cache[path].disposed?
          if filename.empty?
            @cache[path] = Bitmap.new(32, 32)
          else
            @cache[path] = Bitmap.new(path)
          end
        end
        if hue == 0
          return @cache[path]
        else
          key = [path, hue]
          if not @cache.include?(key) or @cache[key].disposed?
            @cache[key] = @cache[path].clone
            @cache[key].hue_change(hue)
          end
          return @cache[key]
        end
      end
    end
    
    
    
    
    
    
    #initialize global variables
    $tileA1 = nil
    $tileA2 = nil
    $tileA3 = nil
    $tileA4 = nil
    $tileA5 = nil
    $tileB = nil
    $tileC = nil
    $tileD = nil
    $tileE = nil
    $swap_passages = nil
    ################################################################################
    class Game_Map
    include Cache_Swap_Tiles  
      alias bulletxt_goodbye_vx_limit_tile_setup setup
      def setup(map_id)
        #if false, normal vx behavior and exit
        if $game_switches[LOAD_PASSAGE_SETTING] == false
        bulletxt_goodbye_vx_limit_tile_setup(map_id) 
        $swap_passages = nil 
        return  
        end
        
     
        path = "Graphics/System/extra_tiles/" + $swap_passages.to_s() + ".rvdata" rescue nil
    
       if $swap_passages != nil
    
         @map_id = map_id
         @map = load_data(sprintf("Data/Map%03d.rvdata", @map_id))
         @display_x = 0
         @display_y = 0
         
         
          # load system settings from that file
          new_system_rvdata = load_data(path)
          # Use passage settings from that file
          @passages = new_system_rvdata.passages
          
          #default vx code
          referesh_vehicles
          setup_events
          setup_scroll
          setup_parallax
          @need_refresh = false
          
        else
        bulletxt_goodbye_vx_limit_tile_setup(map_id)  
        end
       
      end
      
      #if here, player has done a $game_map.tileset call. It must reload
      #map with new passage setting (if it exists) and upate map.
      def tileset
        #if false, we must update and load default passage
        if $game_switches[LOAD_PASSAGE_SETTING] == false
        @passages = $data_system.passages 
        else
        
        #if nil, must reset passage setting to default  
        if $swap_passages == nil
        @passages = $data_system.passages
        $scene = Scene_Map.new
        return
        end 
          
          
    path = "Graphics/System/extra_tiles/" + $swap_passages + ".rvdata" rescue nil
        
        # load system settings from that file
        new_system_rvdata = load_data(path)
        # Use passage settings from that file
        @passages = new_system_rvdata.passages
       
          
       end   
       #this updates the map tiles. it does not modify events or anything else.
       $scene = Scene_Map.new
      end
      
      
      
    end
    
    
    
    class Spriteset_Map
    include Cache_Swap_Tiles  
      alias bulletxt_lodestone_create_tilemap create_tilemap
      def create_tilemap
        if $game_switches[SWAP_TILE] == false
         bulletxt_lodestone_create_tilemap
         $tileA1 = nil
         $tileA2 = nil
         $tileA3 = nil
         $tileA4 = nil
         $tileA5 = nil
         $tileB = nil
         $tileC = nil
         $tileD = nil
         $tileE = nil
        else 
    bulletxt_lodestone_create_tilemap 
    path_to_graphic = "extra_tiles/" 
    
    #tileA1   
    tile1 = Cache_Swap_Tiles.swap($tileA1 + ".png") rescue nil
    @tilemap.bitmaps[0] = tile1 if $tileA1 != nil#if FileTest.exist?(path_to_graphic + $tileA1.to_s() + ".png")
    #tileA2
    tile2 = Cache_Swap_Tiles.swap($tileA2 + ".png") rescue nil
    @tilemap.bitmaps[1] = tile2 if $tileA2 != nil#if FileTest.exist?(path_to_graphic + $tileA2.to_s() + ".png")
    #tileA3
    tile3 = Cache_Swap_Tiles.swap($tileA3 + ".png") rescue nil
    @tilemap.bitmaps[2] = tile3 if $tileA3 != nil#if FileTest.exist?(path_to_graphic + $tileA3.to_s() + ".png")
    #tileA4
    tile4 = Cache_Swap_Tiles.swap($tileA4 + ".png") rescue nil
    @tilemap.bitmaps[3] = tile4 if $tileA4 != nil#if FileTest.exist?(path_to_graphic + $tileA4.to_s() + ".png")
    #tileA5
    tile5 = Cache_Swap_Tiles.swap($tileA5 + ".png") rescue nil
    @tilemap.bitmaps[4] = tile5 if $tileA5 != nil#if FileTest.exist?(path_to_graphic + $tileA5.to_s() + ".png")
    #tileB
    tile6 = Cache_Swap_Tiles.swap($tileB + ".png") rescue nil
    @tilemap.bitmaps[5] = tile6 if $tileB != nil#if FileTest.exist?(path_to_graphic + $tileB.to_s() + ".png")
    #tileC
    tile7 = Cache_Swap_Tiles.swap($tileC + ".png") rescue nil
    @tilemap.bitmaps[6] = tile7 if $tileC != nil#if FileTest.exist?(path_to_graphic + $tileC.to_s() + ".png")
    #tileD
    tile8 = Cache_Swap_Tiles.swap($tileD + ".png") rescue nil
    @tilemap.bitmaps[7] = tile8 if $tileD != nil#if FileTest.exist?(path_to_graphic + $tileD.to_s() + ".png")
    #tileE
    tile9 = Cache_Swap_Tiles.swap($tileE + ".png") rescue nil
    @tilemap.bitmaps[8] = tile9 if $tileE != nil#if FileTest.exist?(path_to_graphic + $tileE.to_s() + ".png")    
    
        
        end
    
      end
    
    end
    
    
    
    class Scene_File < Scene_Base
      alias bulletxt_swap_tiles_write_save_data write_save_data
      def write_save_data(file)
        bulletxt_swap_tiles_write_save_data(file)
        Marshal.dump($tileA1,      file)
        Marshal.dump($tileA2,      file)
        Marshal.dump($tileA3,      file)
        Marshal.dump($tileA4,      file)
        Marshal.dump($tileA5,      file)
        Marshal.dump($tileB,      file)
        Marshal.dump($tileC,      file)
        Marshal.dump($tileD,      file)
        Marshal.dump($tileE,      file)
        Marshal.dump($swap_passages.to_s(),   file)
      end  
      
      
      alias bulletxt_swap_tiles_read_save_data read_save_data
      def read_save_data(file)
        bulletxt_swap_tiles_read_save_data(file)
        $tileA1        = Marshal.load(file)
        $tileA2        = Marshal.load(file)
        $tileA3        = Marshal.load(file)
        $tileA4        = Marshal.load(file)
        $tileA5        = Marshal.load(file)
        $tileB        = Marshal.load(file)
        $tileC        = Marshal.load(file)
        $tileD        = Marshal.load(file)
        $tileE        = Marshal.load(file) 
        $swap_passages = Marshal.load(file)
      end
      
      
      
      end
    Эта небольшая программа с GUI предназначена для непосредственной работы в RPG Maker VX в процессе создания карт. Использования этой прогаммы имеет смысл в том случае, если вы используете мой скрипт Swap Tileset (см. выше, прим. перев). Во время создания карты просто кликните соответствующую кнопку в программе, и она сменит тайлсет на новый, и отобразит непосредственно в RPG Maker (щелкните на другой карте, чтобы изменения были применены). Это очень просто и очень полезно во время создания карт.

    Для работы программы потребуется следующее:
    - Microsoft Visual C++ 2005 Redistributable (или выше). Если приложение отказывается запускаться и в этом случае, установитеЭТО.
    - ВСЕ файлы программы должны быть скопированы в корневую папку вашего проекта (директорию, содержащую Game.exe и пр.)
    - Вы должны скопировать все свои стандартные тайлсеты в папку Graphics/System. Это значит, что там должны расолагаться TileA[n],TileB,TileC,TileD и TileE. Конечно, они могут быть и стандартные из RTP, или ваши собственные, важно чтобы в директории присутствовали тайлсеты с такими именами.

    Вот и все, стоит повториться, сказав, что программа работает только с моим скриптом Swap Tileset. Убедитесь, что прочитали все интсрукции. Скрипт меняет тайлсеты во время игры, а программа меняет тайлсеты только во время реадктирования карт, для упрощения процесса.

    Скриншоты:





    Лицензия:

    Программа написана на C++ с Qt4 Framework toolkit.
    Программа распространяется на основании GNU General Public License 3.
    Ресурсы доступны здесь.
    Скачать программу можно здесь.
    Последний раз редактировалось aisuuw; 13.04.2011 в 19:17.
    Damaged

  2. #2
    Маститый Аватар для The Joker
    Информация о пользователе
    Регистрация
    16.06.2008
    Сообщений
    1,209
    Записей в дневнике
    11
    Репутация: 29 Добавить или отнять репутацию

    Хорошо cooooool :)

    Лично опробовал и скрипт и программку на своем проекте, довольно просто в использовании, а главное - ЭТО РАБОТАЕТ И ЭФФЕКТИВНО. Все, что я видел раньше - и рядом не стояло творением bulletXt, парень рулит.
    Damaged

  3. #3
    Хранитель Форума Аватар для Валера
    Информация о пользователе
    Регистрация
    15.04.2008
    Адрес
    Москва
    Сообщений
    14,020
    Записей в дневнике
    3
    Репутация: 165 Добавить или отнять репутацию

    По умолчанию

    Эх, чего только для VX не придумают.....!!

    Спойлер И как тебе не стыдно-то, а, Валера?:


    Оборона форта: http://rghost.ru/8kLGxFtD2
    Сделать, чтоб все происходило, как я хочу, - вот, собственно, и весь мейкер!
    Адский Рейд: http://rpgmaker.su/downloads/%D0%B7%...-2010raid-full

  4. #4
    Маститый Аватар для The Joker
    Информация о пользователе
    Регистрация
    16.06.2008
    Сообщений
    1,209
    Записей в дневнике
    11
    Репутация: 29 Добавить или отнять репутацию

    По умолчанию

    Ты спятил... ;-) теперь вх может быть разнообразнее, теперь как в хр - неограниченное количество тайлсетов! вэха рулит!
    Damaged

  5. #5
    Маститый Аватар для The Joker
    Информация о пользователе
    Регистрация
    16.06.2008
    Сообщений
    1,209
    Записей в дневнике
    11
    Репутация: 29 Добавить или отнять репутацию

    По умолчанию

    У меня такой вопрос.
    После загрузки тайлов скриптом и включения смены в свитчах, в эвентах отображаются тайлы, взятые из стандартных, лежащих в папке System, тайлсетов, а нужно чтобы из подгруженных скриптом.
    Как сделать так, чтобы эвенты отображал подгруженный тайлсет, а не стандартный?
    Damaged

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •