O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

VONDAFT MAP SLIDE SCROLLING

Iniciado por VonDaft, 01/10/2016 às 10:44

01/10/2016 às 10:44 Última edição: 20/01/2017 às 09:17 por King Gerar
VONDAFT MAP SLIDE SCROLLING

Compativel com: RMVXA
Compatibilidade: Boa
Facilidade de uso: Fácil
Lag gerado: Baixo

[box class=titlebg]
Condições de Uso
[/box]
Livre para uso pessoal e profissional
Para uso comercial, favor entrar em contato pelo e-mail RNDAFT@LIVE.COM
Favor, não compartilhar sem meu conhecimento.

[box class=titlebg]
Para que serve o script
[/box]
Cria um efeito de transição de tela como os jogos da série Zelda.
É possível configurar se o efeito será deslizante ou instantâneo.
O script também retorna os valores do bloco do mapa, caso o usuário deseje criar seus sistemas com base na posição do herói , seja utilizando uma função em script facilmente utilizada, seja por variáveis.

ATENÇÃO!
O Script funciona corretamente apenas na resolução 640x416;
Os mapas devem seguir o padrão de 20x13 e trabalhar com blocos iguais deste tamanho (EX: 40x26, 20x26, 60x26, 200x130). O script NÃO IRÁ FUNCIONAR CORRETAMENTE SE OS MAPAS NÃO SEGUIREM ESTE PADRÃO!

Para facilitar a criação dos mapas, utilize a opção de Grades na tela de construção de Mapa do Rpg Maker. (Vá no Menu Superior > Ferramentas > Opções, marque a opção Grade e configure o tamanho para 20 x 13). Construa seus mapas respeitando estas grades para criar as passagens entres os blocos do mapa.


[box class=titlebg]
Imagens
[/box]
Não perceptível por imagens.

[box class=titlebg]
Código
[/box]
=begin

            VONDAFT MAP SLIDE SCROLLING
            
        Livre para uso pessoal e profissional
Para uso comercial, favor entrar em contato pelo e-mail RNDAFT@LIVE.COM
            
            

>>>> INSTRUÇÕES: <<<<<

ATENÇÃO: Este código foi adaptado para mapas com dimensões 20x13 
(Resolução 640x416). Em mapas maiores ou menores NÃO IRÁ FUNCIONAR CORRETAMENTE
sem uma configuração mais avançada no código.

O script deve ser colocado acima do MAIN;
Se há outros scripts que modificam o Scene_Map, recomenda-se que este script
seja colocado abaixo de todos os outros.

>>>>>>> COMANDOS <<<<<<<

*****Utilize no comando "Chamar Script"

$room.istant = true/false

Define se a transição do mapa será instantânea ou deslizante (como em Zelda).
TRUE para instantânea, FALSE para deslizante.
Por padrão, este comando vem configurado como FALSE

***** Utilize como condição em Condição > Script ou em Scripts:

$room.is?(X, Y)

Checa se o personagem se encontra no Bloco X,Y do mapa.
Esta função retorna um valor True ou False.




**** COMPATIBILIDADE: ****
Khas Awesome Light Effects

            
=end

module VDF01; module VDF02
  # CONFIGURAÇÃO DE BLOCO DOS MAPAS
# Estas duas variáveis serão armazenadas com relação a posição do herói no mapa
# levando em conta qual bloco o mesmo se encontra. Para facilitar a vida de 
# possíveis sistemas por eventos. Ao lado de MAPBLOCK_X e MAPBLOCK_Y coloque quais
# variáveis do sistema que armazenarão estes valores.

  MAPBLOCK_X = 2
  MAPBLOCK_Y = 3

end; end

module DataManager
  class << self
    alias vondaft_create_game_objects create_game_objects
    alias vondaft_make_save_contents make_save_contents
    alias vondaft_extract_save_contents extract_save_contents
  end
  def self.create_game_objects
    vondaft_create_game_objects
    $room = Slide_Scroll.new
  end
  def self.make_save_contents
    contents = vondaft_make_save_contents
    contents[:room] = $room
    contents
  end
  def self.extract_save_contents(contents)
    vondaft_extract_save_contents(contents)
    $room = contents[:room]
  end
end

class Slide_Scroll
  attr_accessor :room
  attr_accessor :istant
  def initialize
    @room = []
    @room[0] = 0
    @room[1] = 0
    @istant = false
  end
  def room_x
    return (20*@room[0])+((20-1)/2)
  end
  def room_y
    return (13*@room[1])+((13-1)/2)
  end
  def is?(x,y)
    return (@room[0] == x && @room[1] == y)
  end
  def update_var
    if VDF01::VDF02::MAPBLOCK_X != 0
      $game_variables[VDF01::VDF02::MAPBLOCK_X] = @room[0]
    end
    if VDF01::VDF02::MAPBLOCK_Y != 0
      $game_variables[VDF01::VDF02::MAPBLOCK_Y] = @room[1]
    end
  end
  def scroll?
    return 2 if ($game_player.y - room_y) > 6
    return 4 if ($game_player.x - room_x) < -9
    return 6 if ($game_player.x - room_x) > 10
    return 8 if ($game_player.y - room_y) < -6
    return 0
  end
  def exec_room_scroll(direction=scroll?, distance=0, speed=6, x=1, y=1)
    distance = 13 if (direction == 2 || direction == 8)
    distance = 20 if (direction == 4 || direction == 6)
    case direction
    when 2 #down
      @room[1] += y
    when 4 #left
      @room[0] -= x
    when 6 #right
      @room[0] += x
    when 8 #up
      @room[1] -= y
    end
    $game_map.do_scroll(direction, distance) if @istant
    $game_map.start_scroll(direction, distance, speed) if !@istant
    update_var
  end
  def warp
    @room[0] = $game_player.x / 20
    @room[1] = $game_player.y / 13
    $game_map.set_display_pos(20*@room[0], 13*@room[1])
    update_var
  end
end

class Game_Player < Game_Character
  alias vondaft_movable? movable?
  def movable?
    return false if $game_map.scrolling?
    vondaft_movable?
  end
  def update_scroll(last_real_x, last_real_y)
    if $room.scroll? != 0
      $room.exec_room_scroll
    end
  end
end

class Scene_Map < Scene_Base
  alias vondaft_perform_transition perform_transition
  alias vondaft_post_transfer post_transfer
  alias vondaft_update_call_menu update_call_menu
  def perform_transition
    $room.warp
    vondaft_perform_transition
  end
  def post_transfer
    $room.warp
    vondaft_post_transfer
  end
  def update_call_menu
    return if $game_map.scrolling?
    vondaft_update_call_menu
  end
end