Aldeia RPG

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Suporte ao desenvolvimento de jogos


5 participantes

    MS - Parallax Mapping

    Valentine
    Valentine
    Administrador
    Administrador


    Medalhas : MS - Parallax Mapping ZgLkiRU
    Mensagens : 5345
    Créditos : 1164

    MS - Parallax Mapping Empty MS - Parallax Mapping

    Mensagem por Valentine 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
    Kies
    Kies
    Diva
    Diva


    Mensagens : 1155
    Créditos : 124

    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 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

    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 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 ZgLkiRU
    Mensagens : 5345
    Créditos : 1164

    MS - Parallax Mapping Empty Re: MS - Parallax Mapping

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

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


    Medalhas : MS - Parallax Mapping ZgLkiRU
    Mensagens : 5345
    Créditos : 1164

    MS - Parallax Mapping Empty Re: MS - Parallax Mapping

    Mensagem por Valentine 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
        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


    Última edição por Valentine em Sex Mar 12, 2021 7:18 pm, editado 1 vez(es)
    OFWGKTA
    OFWGKTA
    Experiente
    Experiente


    Mensagens : 408
    Créditos : 27

    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 OFWGKTA Sex Dez 28, 2018 8:19 pm

    Obra de arte


    _________________
    MS - Parallax Mapping 112898
    EVANGELION 
    PoxaFiih
    PoxaFiih
    Novato
    Novato


    Mensagens : 22
    Créditos : 2

    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 Sáb 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 : 172
    Créditos : 4

    MS - Parallax Mapping Empty Re: MS - Parallax Mapping

    Mensagem por Haseo 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 Nov 21, 2024 2:20 pm