Suporte no desenvolvimento de jogos


    MS - Parallax Mapping

    Valentine
    Valentine
    Administrador
    Administrador

    Medalhas : MS - Parallax Mapping 94JxvMS - Parallax Mapping ZgLkiRU
    Mensagens : 5021
    Créditos : 1114
    Cash : 0

    MS - Parallax Mapping Empty MS - Parallax Mapping

    Mensagem por Valentine em Ter Maio 22, 2018 1:15 pm

    Introdução
    Eu já vi alguns scripts de mapeamento por parallax (ou overlay, sei lá...) por aí, e achei a ideia bem interessante, além disso, já vi mapas incríveis feitos usando essa técnica, aí, decidi criar um script para facilitar a aplicação desse tipo de técnica no jogo

    Características
    O script permite, claro, o mapeamento por parallax, ele permite que se crie quantas camadas forem necessárias, definir se a camada ficará acima ou abaixo do player, qual a prioridade dela em relação às outras e também definir uma switch para mostrar/esconder a camada, quase tudo é opcional no script, assim não é necessário criar imagens em branco e afins.

    Instruções
    No script, nos comentários em verde

    Screenshots
    Como não sou bom mapper, e não vi outra forma de mostrar as possibilidades do script, peguei um mapa do projeto Pirate Rush, do Galv, para dar exemplo, mas vale ressaltar que não fui eu que fiz o mapa:
    MS - Parallax Mapping Parallax-map-lost-woods2
    É óbvio que o mapa do Galv não foi feito usando meu script, mas é bem possível recriar esse mapa usando ele

    Script
    Código:
    #==============================================================================
    # MS - Parallax Mapping
    #------------------------------------------------------------------------------
    # por Masked
    #==============================================================================
    #==============================================================================
    # Instruções
    #------------------------------------------------------------------------------
    # Primeiro, crie uma pasta 'Overlay' (sem aspas) dentro da pasta 'Graphics' do
    # seu projeto, depois, crie as camadas do mapa usando um programa de edição de
    # imagem com suporte para transparência, e ponha o arquivo na pasta que você
    # criou, o nome do arquivo deve ser 'Map00X_sufixo' (sem aspas), ou seja, a
    # camada '_ground' (layer1) do mapa de número 1 deve ter um arquivo com nome
    # 'Map001_ground' na pasta.
    #==============================================================================
    ($imported ||= {})[:ms_parallax] = true
    #==============================================================================
    # Configurações
    #==============================================================================
    module MS_ParallaxMapping
      
      #--------------------------------------------------------------------------
      # Configurações das camadas
      #--------------------------------------------------------------------------
      # Para criar novas camadas, basta adicionar um novo item à lista de
      # camadas, o item deve seguir o modelo:
      # nome_da_camada: ["_sufixo","down/up",z]
      # no caso, o nome_da_camada pode ser qualquer um, o sufixo também, o
      # down/up significa que pode ser down ou up, down fará a imagem ficar
      # abaixo do jogador e up fará ela ficar acima, caso esse item fuja do
      # padrão proposto, será assumido o valor como "up".
      # O z é opcional, e define a prioridade de cada camada, uma camada com z 1
      # fica acima de outra com z 0
      #--------------------------------------------------------------------------
      Layers = {
        layer1: ["_ground","down"],
        layer11: ["_ground2","down",50],
        layer2: ["_overlay","up"],
      }
      
      #--------------------------------------------------------------------------
      # Configurações das switches
      #--------------------------------------------------------------------------
      # As switches são as switches que fazem as camadas aparecerem ou não, se
      # a switch estiver ligada, a camada aparece.
      #
      # A switch deve ser configurada para a respectiva camada, com o mesmo nome
      # usado na 'Layers', da configuração das camadas, para definir a switch,
      # apenas ponha o ID dela depois do nome da camda
      #--------------------------------------------------------------------------
      Switches = {
        layer1: 1,
        layer11: 1,
        layer2: 2,
      }
      
    end
    #==============================================================================
    # Fim das Configurações
    #==============================================================================
    #==============================================================================
    # ** Spriteset_Map
    #==============================================================================
    class Spriteset_Map
      
      attr_accessor :layers
      
      alias ms_initlz initialize
      alias ms_updt update
      alias ms_crtvwprts create_viewports
      alias ms_updvwprts update_viewports
      
      #--------------------------------------------------------------------------
      # * Inicialização do objeto
      #--------------------------------------------------------------------------
      def initialize
        create_viewports
        create_tilemap
        create_parallax
        create_characters
        create_shadow
        create_weather
        create_pictures
        create_timer
        create_layers
        update
      end
      #--------------------------------------------------------------------------
      # * Criação do viewport
      #--------------------------------------------------------------------------
      def create_viewports
        ms_crtvwprts
        @viewport0 = Viewport.new
        @viewport_down = Viewport.new
        @viewport_up = Viewport.new
        @viewport0.z = -50
        @viewport_down.z = -10
        @viewport_up.z = 150
      end
      #--------------------------------------------------------------------------
      # * Criação do tilemap
      #--------------------------------------------------------------------------
      def create_tilemap
        @tilemap = Tilemap.new(@viewport0)
        @tilemap.map_data = $game_map.data
        load_tileset
      end
      #--------------------------------------------------------------------------
      # * Criação das camadas de imagens do mapa
      #--------------------------------------------------------------------------
      def create_layers
        
        @layers = {}
        
        MS_ParallaxMapping::Layers.each {|layer|
              
          @layers[layer[0]] = Sprite.new(layer[1][1] == "down" ? @viewport_down : @viewport_up)
          @layers[layer[0]].z = layer[1][2] unless layer[1][2].nil?
          @layers[layer[0]].bitmap = Cache.overlay(sprintf("Map%03d",$game_map.map_id) + layer[1][0])
          
        }
        
      end
      #--------------------------------------------------------------------------
      # * Atualização da tela
      #--------------------------------------------------------------------------
      def update
        ms_updt
        update_layers
      end
      #--------------------------------------------------------------------------
      # * Atualização das camadas
      #--------------------------------------------------------------------------
      def update_layers
        MS_ParallaxMapping::Layers.each {|layer|
          @layers[layer[0]].visible = MS_ParallaxMapping::Switches[layer[0]] ? $game_switches[MS_ParallaxMapping::Switches[layer[0]]] : true
          @layers[layer[0]].ox = $game_map.display_x*32
          @layers[layer[0]].oy = $game_map.display_y*32
        }
      end
      #--------------------------------------------------------------------------
      # * Atualização dos viewports
      #--------------------------------------------------------------------------
      def update_viewports
        ms_updvwprts
        
        @viewport0.ox = $game_map.screen.shake
        @viewport_down.ox = $game_map.screen.shake
        @viewport_up.ox = $game_map.screen.shake
        
        @viewport0.update
        @viewport_down.update
        @viewport_up.update
        
      end
    end
    #==============================================================================
    # ** Cache
    #==============================================================================
    module Cache
      #--------------------------------------------------------------------------
      # * Carregamento dos gráficos de overlay
      #--------------------------------------------------------------------------
      def self.overlay(filename)
        
        exists = false
        
        Dir.entries("Graphics/Overlay/").each {|file|
          if file =~ /#{filename}\.[[:ascii:]]*/
            exists = true
            break
          end
        }
        
        exists ? load_bitmap("Graphics/Overlay/",filename) : empty_bitmap
      end
    end
    Cole acima do main

    Créditos
    Masked


    _________________
    MS - Parallax Mapping AIymW
    Kies
    Kies
    Aldeia Friend
    Aldeia Friend

    Mensagens : 1139
    Créditos : 124
    Cash : 0

    Ficha do personagem
    Nível: 1
    Experiência:
    MS - Parallax Mapping Left_bar_bleue0/0MS - Parallax Mapping Empty_bar_bleue  (0/0)
    Vida:
    MS - Parallax Mapping Left_bar_bleue30/30MS - Parallax Mapping Empty_bar_bleue  (30/30)

    MS - Parallax Mapping Empty Re: MS - Parallax Mapping

    Mensagem por Kies em Qui Maio 24, 2018 11:40 am

    Oque aconteceu com masked? morreu kkkk

    irei estudar esse sistema
    PoxaFiih
    PoxaFiih
    Novato
    Novato

    Mensagens : 22
    Créditos : 2
    Cash : 0

    Ficha do personagem
    Nível: 1
    Experiência:
    MS - Parallax Mapping Left_bar_bleue0/0MS - Parallax Mapping Empty_bar_bleue  (0/0)
    Vida:
    MS - Parallax Mapping Left_bar_bleue30/30MS - Parallax Mapping Empty_bar_bleue  (30/30)

    MS - Parallax Mapping Empty Re: MS - Parallax Mapping

    Mensagem por PoxaFiih em Qui Dez 27, 2018 3:13 pm

    MS - Parallax Mapping Erro10
    Boa tarde! Ao colocar este script no VXA-OS apresentou este erro... 
    Ele não é compatível com o sistema?
    Valentine
    Valentine
    Administrador
    Administrador

    Medalhas : MS - Parallax Mapping 94JxvMS - Parallax Mapping ZgLkiRU
    Mensagens : 5021
    Créditos : 1114
    Cash : 0

    MS - Parallax Mapping Empty Re: MS - Parallax Mapping

    Mensagem por Valentine em Qui Dez 27, 2018 10:34 pm

    Ainda não testei no VXA-OS, mas vou verificar a compatibilidade.


    _________________
    MS - Parallax Mapping AIymW
    Valentine
    Valentine
    Administrador
    Administrador

    Medalhas : MS - Parallax Mapping 94JxvMS - Parallax Mapping ZgLkiRU
    Mensagens : 5021
    Créditos : 1114
    Cash : 0

    MS - Parallax Mapping Empty Re: MS - Parallax Mapping

    Mensagem por Valentine em Sex Dez 28, 2018 5:34 pm

    Fiz uma modificação no script para adaptá-lo ao VXA-OS:

    Código:
    #==============================================================================
    # MS - Parallax Mapping
    #------------------------------------------------------------------------------
    # por Masked
    #==============================================================================
    #==============================================================================
    # Instruções
    #------------------------------------------------------------------------------
    # Primeiro, crie uma pasta 'Overlay' (sem aspas) dentro da pasta 'Graphics' do
    # seu projeto, depois, crie as camadas do mapa usando um programa de edição de
    # imagem com suporte para transparência, e ponha o arquivo na pasta que você
    # criou, o nome do arquivo deve ser 'Map00X_sufixo' (sem aspas), ou seja, a
    # camada '_ground' (layer1) do mapa de número 1 deve ter um arquivo com nome
    # 'Map001_ground' na pasta.
    #==============================================================================
    ($imported ||= {})[:ms_parallax] = true
    #==============================================================================
    # Configurações
    #==============================================================================
    module MS_ParallaxMapping
     
      #--------------------------------------------------------------------------
      # Configurações das camadas
      #--------------------------------------------------------------------------
      # Para criar novas camadas, basta adicionar um novo item à lista de
      # camadas, o item deve seguir o modelo:
      # nome_da_camada: ["_sufixo","down/up",z]
      # no caso, o nome_da_camada pode ser qualquer um, o sufixo também, o
      # down/up significa que pode ser down ou up, down fará a imagem ficar
      # abaixo do jogador e up fará ela ficar acima, caso esse item fuja do
      # padrão proposto, será assumido o valor como "up".
      # O z é opcional, e define a prioridade de cada camada, uma camada com z 1
      # fica acima de outra com z 0
      #--------------------------------------------------------------------------
      Layers = {
        layer1: ["_ground","down"],
        layer11: ["_ground2","down",50],
        layer2: ["_overlay","up"],
      }
     
      #--------------------------------------------------------------------------
      # Configurações das switches
      #--------------------------------------------------------------------------
      # As switches são as switches que fazem as camadas aparecerem ou não, se
      # a switch estiver ligada, a camada aparece.
      #
      # A switch deve ser configurada para a respectiva camada, com o mesmo nome
      # usado na 'Layers', da configuração das camadas, para definir a switch,
      # apenas ponha o ID dela depois do nome da camda
      #--------------------------------------------------------------------------
      Switches = {
        layer1: 1,
        layer11: 1,
        layer2: 2,
      }
     
    end
    #==============================================================================
    # Fim das Configurações
    #==============================================================================
    #==============================================================================
    # ** Spriteset_Map
    #==============================================================================
    class Spriteset_Map
     
      attr_accessor :layers
     
      alias ms_initlz initialize
      alias ms_updt update
      alias ms_crtvwprts create_viewports
      alias ms_updvwprts update_viewports
     
      #--------------------------------------------------------------------------
      # * Inicialização do objeto
      #--------------------------------------------------------------------------
      def initialize
        create_viewports
        create_tilemap
        create_parallax
        create_characters
        create_shadow
        create_weather
        create_pictures
        create_timer
        create_layers
        create_players
        update
      end
      #--------------------------------------------------------------------------
      # * Criação do viewport
      #--------------------------------------------------------------------------
      def create_viewports
        ms_crtvwprts
        @viewport0 = Viewport.new
        @viewport_down = Viewport.new
        @viewport_up = Viewport.new
        @viewport0.z = -50
        @viewport_down.z = -10
        @viewport_up.z = 150
      end
      #--------------------------------------------------------------------------
      # * Criação do tilemap
      #--------------------------------------------------------------------------
      def create_tilemap
        @tilemap = Tilemap.new(@viewport0)
        @tilemap.map_data = $game_map.data
        load_tileset
      end
      #--------------------------------------------------------------------------
      # * Criação das camadas de imagens do mapa
      #--------------------------------------------------------------------------
      def create_layers
       
        @layers = {}
       
        MS_ParallaxMapping::Layers.each {|layer|
             
          @layers[layer[0]] = Sprite.new(layer[1][1] == "down" ? @viewport_down : @viewport_up)
          @layers[layer[0]].z = layer[1][2] unless layer[1][2].nil?
          @layers[layer[0]].bitmap = Cache.overlay(sprintf("Map%03d",$game_map.map_id) + layer[1][0])
         
        }
       
      end
      #--------------------------------------------------------------------------
      # * Atualização da tela
      #--------------------------------------------------------------------------
      def update
        ms_updt
        update_layers
      end
      #--------------------------------------------------------------------------
      # * Atualização das camadas
      #--------------------------------------------------------------------------
      def update_layers
        MS_ParallaxMapping::Layers.each {|layer|
          @layers[layer[0]].visible = MS_ParallaxMapping::Switches[layer[0]] ? $game_switches[MS_ParallaxMapping::Switches[layer[0]]] : true
          @layers[layer[0]].ox = $game_map.display_x*32
          @layers[layer[0]].oy = $game_map.display_y*32
        }
      end
      #--------------------------------------------------------------------------
      # * Atualização dos viewports
      #--------------------------------------------------------------------------
      def update_viewports
        ms_updvwprts
       
        @viewport0.ox = $game_map.screen.shake
        @viewport_down.ox = $game_map.screen.shake
        @viewport_up.ox = $game_map.screen.shake
       
        @viewport0.update
        @viewport_down.update
        @viewport_up.update
       
      end
    end
    #==============================================================================
    # ** Cache
    #==============================================================================
    module Cache
      #--------------------------------------------------------------------------
      # * Carregamento dos gráficos de overlay
      #--------------------------------------------------------------------------
      def self.overlay(filename)
       
        exists = false
       
        Dir.entries("Graphics/Overlay/").each {|file|
          if file =~ /#{filename}\.[[:ascii:]]*/
            exists = true
            break
          end
        }
       
        exists ? load_bitmap("Graphics/Overlay/",filename) : empty_bitmap
      end
    end


    _________________
    MS - Parallax Mapping AIymW
    Mundator
    Mundator
    Membro Ativo
    Membro Ativo

    Mensagens : 389
    Créditos : 27
    Cash : 5

    Ficha do personagem
    Nível: 1
    Experiência:
    MS - Parallax Mapping Left_bar_bleue5/50MS - Parallax Mapping Empty_bar_bleue  (5/50)
    Vida:
    MS - Parallax Mapping Left_bar_bleue30/30MS - Parallax Mapping Empty_bar_bleue  (30/30)

    MS - Parallax Mapping Empty Re: MS - Parallax Mapping

    Mensagem por Mundator em Sex Dez 28, 2018 8:19 pm

    Obra de arte


    _________________
    MS - Parallax Mapping Tumblr_n43fce1dX11rd27fwo1_400
    PoxaFiih
    PoxaFiih
    Novato
    Novato

    Mensagens : 22
    Créditos : 2
    Cash : 0

    Ficha do personagem
    Nível: 1
    Experiência:
    MS - Parallax Mapping Left_bar_bleue0/0MS - Parallax Mapping Empty_bar_bleue  (0/0)
    Vida:
    MS - Parallax Mapping Left_bar_bleue30/30MS - Parallax Mapping Empty_bar_bleue  (30/30)

    MS - Parallax Mapping Empty Re: MS - Parallax Mapping

    Mensagem por PoxaFiih em Sab Dez 29, 2018 12:39 pm

    MS - Parallax Mapping Parall10
    Olá! Este sistema é muito bom, porém ainda utilizo um antigo que tenho por familiaridade, mas encontrei um bug... 

    Ao criar um mapa como _ground e outro _overlay e utilizálos no VXA-OS, o _overlay, por ficar a frente do player, ele também está ficando à frente da HUD... Como as hotkeys, chat, botões e informações do personagem... 

    Não manjo muito de script, mas é possivel corrigir pelo próprio mapemanto do RPG Maker, isto criando um tileset com as partes que são "overlay" e mapear por cima do parallax. 

    (Para que não tenha erros ao mapear, ao abrir informação do mapa, adicione o parallax e ative a função ver no editor. Ao terminar a edição, tire o parallax das informações pois o script já insere o background.)

    Por sua vez, caso vá utilizar overlay como efeito de luz com opacidade dá um resultado legal, mesmo escurecendo um pouco a HUD.
    Haseo
    Haseo
    Ocasional
    Ocasional

    Mensagens : 169
    Créditos : 4
    Cash : 0

    MS - Parallax Mapping Empty Re: MS - Parallax Mapping

    Mensagem por Haseo em Dom Out 13, 2019 1:33 am

    MS - Parallax Mapping Erro11
    O meu Deu esse erro, coloquei certinho e peguei o script adaptavel pro VXA-OS!

    Conteúdo patrocinado

    MS - Parallax Mapping Empty Re: MS - Parallax Mapping

    Mensagem por Conteúdo patrocinado


      Data/hora atual: Qui Dez 05, 2019 5:50 pm