Path Finding Para O RPG Maker XP

31 de julho de 2015
acessar Path Finding Para O RPG Maker XP

Segue o clássico script de Path Finding, que leva o jogador ou um evento a um determinado ponto do mapa, pegando o menor percurso e desviando dos objetos, num projeto/game do RPG Maker XP.

O Path Finding foi desenvolvido pelo Near Fantastica, e oferece um método simples e rápido de fazer isto, pois o processo de procurar o caminho é incorporado no Game Character.

O pathfinding pode ser interrompido ou redesenhado a qualquer hora.

Utilização

Para utilizar, chame o script:

find_path(x,y)

Onde x e y são as posições finais para o evento percorrer.

E, para instalar, basta inserir o código abaixo acima do Main:

#==============================================================================
#  ** Path Finding
#==============================================================================
# Near Fantastica
# Version 1
# 29.11.05
#==============================================================================
# Lets the Player or Event draw a path from an desonation to the source. This
# method is very fast and because the palthfinding is imbeded into the Game
# Character the pathfinding can be inturputed or redrawn at any time. 
#==============================================================================
# Player :: $game_player.find_path(x,y)
# Event Script Call :: self.event.find_path(x,y)
# Event Movement Script Call :: self.find_path(x,y)
#==============================================================================

#--------------------------------------------------------------------------
# * SDK Log Script
#--------------------------------------------------------------------------
SDK.log("Path Finding", "Near Fantastica", 1, "29.11.05")

#--------------------------------------------------------------------------
# * Begin SDK Enable Test
#--------------------------------------------------------------------------
if SDK.state("Path Finding") == true
  class Game_Character
    #--------------------------------------------------------------------------
    alias nf_pf_game_character_initialize initialize
    alias nf_pf_game_character_update update
    #--------------------------------------------------------------------------
    attr_accessor :map
    attr_accessor :runpath
    #--------------------------------------------------------------------------
    def initialize
      nf_pf_game_character_initialize
      @map = nil
      @runpath = false
    end
    #--------------------------------------------------------------------------
    def update
      run_path if @runpath == true
      nf_pf_game_character_update
    end
    #--------------------------------------------------------------------------
    def run_path
      return if moving?
      step = @map[@x,@y]
      if step == 1
        @map = nil
        @runpath = false
        return
      end
      dir = rand(2)
      case dir
      when 0
        move_right if @map[@x+1,@y] == step - 1 and step != 0
        move_down if @map[@x,@y+1] == step - 1 and step != 0
        move_left if @map[@x-1,@y] == step -1 and step != 0
        move_up if @map[@x,@y-1] == step - 1 and step != 0
      when 1
        move_up if @map[@x,@y-1] == step - 1 and step != 0
        move_left if @map[@x-1,@y] == step -1 and step != 0
        move_down if @map[@x,@y+1] == step - 1 and step != 0
        move_right if @map[@x+1,@y] == step - 1 and step != 0
      end
    end
    #--------------------------------------------------------------------------
    def find_path(x,y)
      sx, sy = @x, @y
      result = setup_map(sx,sy,x,y)
      @runpath = result[0]
      @map = result[1]
      @map[sx,sy] = result[2] if result[2] != nil
    end
    #--------------------------------------------------------------------------
    def clear_path
      @map = nil
      @runpath = false
    end
    #--------------------------------------------------------------------------
    def setup_map(sx,sy,ex,ey)
      map = Table.new($game_map.width, $game_map.height)
      map[ex,ey] = 1
      old_positions = []
      new_positions = []
      old_positions.push([ex, ey])
      depth = 2
      depth.upto(100){|step|
        loop do
          break if old_positions[0] == nil
          x,y = old_positions.shift
          return [true, map, step] if x == sx and y+1 == sy
          if $game_player.passable?(x, y, 2) and map[x,y + 1] == 0
            map[x,y + 1] = step
            new_positions.push([x,y + 1])
          end
          return [true, map, step] if x-1 == sx and y == sy
          if $game_player.passable?(x, y, 4) and map[x - 1,y] == 0
            map[x - 1,y] = step
            new_positions.push([x - 1,y])
          end
          return [true, map, step] if x+1 == sx and y == sy
          if $game_player.passable?(x, y, 6) and map[x + 1,y] == 0
            map[x + 1,y] = step
            new_positions.push([x + 1,y])
          end
          return [true, map, step] if x == sx and y-1 == sy
          if $game_player.passable?(x, y, 8) and map[x,y - 1] == 0
            map[x,y - 1] = step
            new_positions.push([x,y - 1])
          end
        end
        old_positions = new_positions
        new_positions = []
      }
      return [false, nil, nil]
    end
  end
  
  class Game_Map
    #--------------------------------------------------------------------------
    alias pf_game_map_setup setup
    #--------------------------------------------------------------------------
    def setup(map_id)
      pf_game_map_setup(map_id)
      $game_player.clear_path
    end
  end
  
  class Game_Player
    #--------------------------------------------------------------------------
    alias pf_game_player_update_player_movement update_player_movement
    #--------------------------------------------------------------------------
    def update_player_movement
      $game_player.clear_path if Input.dir4 != 0
      pf_game_player_update_player_movement
    end
  end
  
  class Interpreter
    #--------------------------------------------------------------------------
    def event
      return $game_map.events[@event_id]
    end
  end
  
#--------------------------------------------------------------------------
# * End SDK Enable Test
#--------------------------------------------------------------------------
end

Pinball Space

30 de julho de 2015
acessar Pinball Space

Jogue um pinball espacial e divirta-se, relembrando os velhos tempos dos fliperamas, Pinball Space, este joguinho online! Mande as bolas e tente pegar a MultiBall, para conseguir marcar as maiores pontuações e depois desafiar seus amigos a batê-las. Este game tem os gráficos simples, mas a física usada para simular a jogabilidade de uma máquina pinball é muito boa. Controles […]

Derrotando Guile com o Ken no SF2CE

29 de julho de 2015
assistir Derrotando Guile com o Ken no SF2CE

No mais novo vídeo do nosso canal do YouTube, nós ensinamos como pode ser vencido o Guile com o Ken, no Street Fighter 2: Champion Edition. Nós gravamos este gameplay outro dia, na mesma partida de quando estávamos fazendo o vídeo da fase de bônus do Street Fighter 2, só que esquecemos disso… Mas agora está aí! A estratégia para […]

View Range Module 5.0

28 de julho de 2015
acessar View Range Module 5.0

View Range Module é um script para o RPG Maker XP, desenvolvido pelo Near Fantastica e o SephirothSpawn, que é usado para testar a posição de objetos em comparação com outro objeto.

Ele pode testar se um objeto está em um raio circular definido ou em uma região retangular defina. O módulo também vai dizer a você as distâncias entre os objetos. Você pode usar isto como condições, opções de script ou em variáveis stock.

Código do View Range Module 5.0:

#==============================================================================
# ** Modules.View Range (5.0)   By Near Fantastica & SephirothSpawn
#------------------------------------------------------------------------------
# * Description :
#
#   The View Range Module is used to test objects position in comparision with
#   another object. It can test if an object is within a defined circular
#   range of another object or a rectangular defined region. It can also tell
#   you this distances between objects.
#------------------------------------------------------------------------------
# * Syntax :
#
#   Test if object is within defined range from another object :
#- VR.in_range?(object1, object2, range)
#- VR.in_range?(object1x, object1y, object2x, object2y, range)
#
#   Test if object is within defined rectanlge :
#- VR.in_rect_range?(object, <args>)
#- VR.in_rect_range?(x, y, <args>)
#
#args can either be : x, y, width, height or Rect.new(x, y, width, height)
#
#   Test range between objects :
#- range = VR.range(object1, object2, <integer>)
#- range = VR.range(object1x, object1y, object2x, object2y, <integer>)
#
#integer : if true, returns integer ; if false, returns float
#==============================================================================
 
MACL::Loaded << 'Modules.View Range'
 
#==============================================================================
# ** View Range
#==============================================================================
 
module VR
  #----------------------------------------------------------------------------
  # * Within Range Test
  #----------------------------------------------------------------------------
  def VR.in_range?(*args)
# If 3 Arguments (Element, Object, Range)
if args.size == 3
  x = (args[0].x - args[1].x) ** 2
  y = (args[0].y - args[1].y) ** 2
  r = args[2]
# If 5 Arguments (Elementx, Elementy, Objectx, Objecty, Range)
elsif args.size == 5
  x = (args[0] - args[2]) ** 2
  y = (args[1] - args[3]) ** 2
  r = args[4]
else
  p 'Wrong Defined Number of Arguments'
  return
end
return (x + y) <= (r * r)
  end
  #----------------------------------------------------------------------------
  # * Within Rect Range Test
  #----------------------------------------------------------------------------
  def VR.in_rect_range?(*args)
# If 2 Arguments (Object, Rect)
if args.size == 2
  x_, y_ = args[0].x, args[0].y
  x, y, w, h = args[1].x, args[1].y, args[1].width, args[1].height
# If 3 Arguments (Objectx, Objecty, Rect)
elsif args.size == 3
  x_, y_ = args[0], args[1]
  x, y, w, h = args[2].x, args[2].y, args[2].width, args[2].height
# If 5 Arguments (Object, Rectx, Recty, Rectwidth, Rectheight)
elsif args.size == 5
  x_, y_ = args[0].x, args[0].y
  x, y, w, h = args[1], args[2], args[3], args[4]
# If 6 Arguments (Objectx, Objecty, Rectx, Recty, Rectwidth, Rectheight)
elsif args.size == 6
  x_, y_, x, y, w, h = *args
else
  p 'Wrong Defined Number of Arguments'
  return
end
# Return Object Within Rect
return x_.between?(x, x + w) && y_.between?(y, y + h)
  end
  #----------------------------------------------------------------------------
  # * Range
  #----------------------------------------------------------------------------
  def VR.range(*args)
# If 2 Arguments (Element, Object)
if args.size == 2
  x = (args[0].x - args[1].x) * (args[0].x - args[1].x)
  y = (args[0].y - args[1].y) * (args[0].y - args[1].y)
  integer = true
# If 3 Arguments (Element, Object, Integer
elsif args.size == 3
  x = (args[0].x - args[1].x) * (args[0].x - args[1].x)
  y = (args[0].y - args[1].y) * (args[0].y - args[1].y)
  integer = args[2]
# If 4 Arguments (Elementx, Elementy, Objectx, Objecty)
elsif args.size == 4
  x = (args[0] - args[2]) * (args[0] - args[2])
  y = (args[1] - args[3]) * (args[1] - args[3])
  integer = true
# If 5 Arguments (Elementx, Elementy, Objectx, Objecty, integer)
elsif args.size == 5
  x = (args[0] - args[2]) * (args[0] - args[2])
  y = (args[1] - args[3]) * (args[1] - args[3])
  integer = args[4]
else
  p 'Wrong Defined Number of Arguments'
  return
end
r = Math.sqrt(x + y)
return integer ? r.to_i : r
  end
end

Resource Hacker 4.2.4

27 de julho de 2015
acessar Resource Hacker 4.2.4

O Resource Hacker BR é uma conhecida ferramenta usada pelos makers brasileiros desde a época do RPG Maker 2000, que foi desenvolvida por Angus Johnson e traduzida para o português brasileiro.

Entretanto, este programa já é bem antigo que várias versões novas dele já foram lançadas pelo autor original. Pensando nisso, adicionamos aqui a mais nova versão até o momento, a 4.2.4 do Resource Hacker. Acesse o resto deste post »

Flappy Turd

25 de julho de 2015
acessar Flappy Turd

O infame Flappy Bird é um dos jogos que mais ganharam clones em menos tempo… E alguns são mais toscos que os outros e o Flappy Turd é, provavelmente, o pior deles. Depois de ajudar o passarinho a escapar dos cocôs voadores em Shit Bird, você agora vai ter que ajudar o cocô voador a ir o mais longe que […]

MOG Resume V1.1

24 de julho de 2015
acessar MOG Resume V1.1

MOG Resume é um script desenvolvido pelo Moghunter para ser usado no RPG Maker XP, que implementa um sistema que permite salvar e carregar o jogo apenas um vez por partida. Ou seja, o script salva o progresso e automaticamente sai do jogo. Assim que você iniciar outra partida, ele automaticamente carregará o jogo salvo, e por fim, apagará o arquivo carregado.

É um esquema semelhante aos jogos táticos como Ogre Battle e Final Fantasy Tactics Advanced.

Utilização

Aperte a tecla ALT para chamar o menu de Quick Save (Configurável). É também possível desativar o Quick Save pela Switch ID 10 (Configurável).

Para instalar o MOG Resume V1.1 no seu projeto, basta inserir o código abaixo acima do “Main”:

#_______________________________________________________________________________
# MOG Resume V1.1            
#_______________________________________________________________________________
# By Moghunter   
# http://www.atelier-rgss.com
#_______________________________________________________________________________
# Permite salvar e carregar o jogo apenas um vez por partida.
# Ou seja, o script salva o progresso e automaticamente sai do
# jogo e assim que você reiniciar o jogo ele automaticamente
# carregará o jogo e apagará o save carregado.
# Sistema semelhante ao jogos Taticos como Ogre Battle e
# Final Fantasy Tactics Advanced.
#_______________________________________________________________________________
module MOG
#Botão que ativa a janela de Quick Save.  
QUICK_BUTTON = Input::ALT
#ID da switch que desativa o Quick Save.
QUIK_DISABLE = 10
end

#===============================================================================
# Scene_Title
#===============================================================================
class Scene_Title
  #--------------------------------------------------------------------------
  # main
  #--------------------------------------------------------------------------  
  alias mog41_main main
  def main
    if FileTest.exist?("ResumeSave.rxdata")
      $scene = Auto_Load.new        
    end
    mog41_main      
  end
end  

#===============================================================================
# Scene_Quick
#===============================================================================
class Scene_Quick
  #--------------------------------------------------------------------------
  # initialize
  #--------------------------------------------------------------------------  
  def initialize(menu_index = 0)
    @menu_index = menu_index
  end
  #--------------------------------------------------------------------------
  # main
  #--------------------------------------------------------------------------  
  def main
    s1 = "Resume"
    s2 = "Cancel"
    @command_window = Window_Command.new(160, [s1, s2])
    @command_window.index = @menu_index
    @command_window.x = 640
    @command_window.y = 180
    @command_window.contents_opacity = 0
    @command_window.opacity = 0
    @spriteset = Spriteset_Map.new
    if $game_switches[MOG::QUIK_DISABLE] == true
      @command_window.disable_item(0)
    end    
    Graphics.transition    
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    for i in 0..15
      @command_window.x -= 30  
      @command_window.contents_opacity -= 15
      @command_window.opacity -= 15
      Graphics.update  
    end  
    Graphics.freeze
    @command_window.dispose
    @spriteset.dispose
  end
  #--------------------------------------------------------------------------
  # update
  #--------------------------------------------------------------------------  
 def update
  if @command_window.x > 240
    @command_window.x -= 25
    @command_window.contents_opacity += 15
    @command_window.opacity += 15
  elsif @command_window.x <= 240  
    @command_window.x = 240
    @command_window.contents_opacity = 255
    @command_window.opacity = 255
  end
  @command_window.update
  if Input.trigger?(Input::B)
    $game_system.se_play($data_system.cancel_se)
    $scene = Scene_Map.new
    return
  end
  if Input.trigger?(Input::C)
    case @command_window.index
    when 0  
      if $game_switches[MOG::QUIK_DISABLE] == true
        $game_system.se_play($data_system.cancel_se)
      else
        $game_system.se_play($data_system.decision_se)
        $scene = Auto_Save.new
      end
    when 1  
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
    end
  end   
  end
end

#===============================================================================
# Scene_Map
#===============================================================================
class Scene_Map
  #--------------------------------------------------------------------------
  # update
  #--------------------------------------------------------------------------    
  alias mog41_update update
  def update
    if Input.trigger?(MOG::QUICK_BUTTON)
      $game_system.se_play($data_system.decision_se)
      $scene = Scene_Quick.new
    end
  mog41_update
  end
end  

#===============================================================================
# Auto_Save
#===============================================================================
class Auto_Save
  #--------------------------------------------------------------------------
  # main
  #--------------------------------------------------------------------------    
  def main
    asv(make_filename)
    return
  end
  #--------------------------------------------------------------------------
  # make_filename
  #--------------------------------------------------------------------------  
  def make_filename
    return "ResumeSave.rxdata" 
  end
  #--------------------------------------------------------------------------
  # avs
  #--------------------------------------------------------------------------    
  def asv(filename)
    $game_system.se_play($data_system.save_se)
    file = File.open(filename, "wb")
    write_save_data(file)
    file.close
    Audio.bgm_fade(800)
    Audio.bgs_fade(800)
    Audio.me_fade(800)
    $scene = nil
  end
  #--------------------------------------------------------------------------
  # write_save_data
  #--------------------------------------------------------------------------  
  def write_save_data(file)
    characters = []
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      characters.push([actor.character_name, actor.character_hue])
    end
    Marshal.dump(characters, file)
    Marshal.dump(Graphics.frame_count, file)
    $game_system.save_count += 1
    $game_system.magic_number = $data_system.magic_number
    Marshal.dump($game_system, file)
    Marshal.dump($game_switches, file)
    Marshal.dump($game_variables, file)
    Marshal.dump($game_self_switches, file)
    Marshal.dump($game_screen, file)
    Marshal.dump($game_actors, file)
    Marshal.dump($game_party, file)
    Marshal.dump($game_troop, file)
    Marshal.dump($game_map, file)
    Marshal.dump($game_player, file)
  end
end

#===============================================================================
# Auto_Load  
#===============================================================================
class Auto_Load  
  #--------------------------------------------------------------------------
  # main
  #--------------------------------------------------------------------------    
  def main
    $game_temp = Game_Temp.new  
    Graphics.transition
    ald(make_filename)
    return
  end
  #--------------------------------------------------------------------------
  # make_filename
  #--------------------------------------------------------------------------  
  def make_filename
    return "ResumeSave.rxdata" 
  end
  #--------------------------------------------------------------------------
  # ald
  #--------------------------------------------------------------------------  
  def ald(filename)
    if FileTest.exist?(filename)
      $game_system.se_play($data_system.load_se)
      file = File.open(filename, "rb")
      read_save_data(file) 
      file.close
      File.delete(filename) 
      $game_system.bgm_play($game_system.playing_bgm)
      $game_system.bgs_play($game_system.playing_bgs)
      $game_map.update
      $scene = Scene_Map.new
    else
      Audio.bgm_fade(800)
      Audio.bgs_fade(800)
      Audio.me_fade(800)
      $scene = nil
    end
  end
  #--------------------------------------------------------------------------
  # read_save_data
  #--------------------------------------------------------------------------  
  def read_save_data(file)
    characters = Marshal.load(file)
    Graphics.frame_count = Marshal.load(file)
    $game_system        = Marshal.load(file)
    $game_switches      = Marshal.load(file)
    $game_variables     = Marshal.load(file)
    $game_self_switches = Marshal.load(file)
    $game_screen        = Marshal.load(file)
    $game_actors        = Marshal.load(file)
    $game_party         = Marshal.load(file)
    $game_troop         = Marshal.load(file)
    $game_map           = Marshal.load(file)
    $game_player        = Marshal.load(file)
    if $mogscript["menu_sakura"] == true
      $game_system.load_count += 1
    end
    if $game_system.magic_number != $data_system.magic_number
      $game_map.setup($game_map.map_id)
      $game_player.center($game_player.x, $game_player.y)
    end
    $game_party.refresh
  end
end

$mog_rgss_Resume = true

Ultima VIII: Pagan

23 de julho de 2015
acessar Ultima VIII: Pagan

Sendo o oitavo título da série de RPGs de mesmo nome, o Ultima VIII: Pagan foi desenvolvido pela Origin Systems (que não tem nada a ver com o serviço da Electronic Arts, apesar ser sua dona também) e lançado originalmente pela mesma empresa em 1994, para a plataforma MS-DOS.

Em comparação com o jogos que o antecedem na série, Ultima VII e Ultima VII Part Two: Serpent Isle, não foi tão bem recebido, porém conta com um enredo interessante e belos gráficos típicos da época em que foi lançado. Acesse o resto deste post »

Estacionando o carro na fase de bônus do Street Fighter 2

21 de julho de 2015
acessar Estacionando o carro na fase de bônus do Street Fighter 2

Ontem (20 de julho de 2015), nós publicamos um meme que achamos por aqui (em outras palavras, kibamos) na nossa página do Facebook que é simples, mas fantástico.

Daí, comentaram lá na Curtas do Doomguy, a página nossa que compartilhou o meme: “Pode ficar sossegado, pode estacionar o carro aí de boa. Não há nenhum carateca enlouquecido, carecas soltando fogo das ventas ou generais voando por estas redondezas.”

Isso foi genial. Daí, resolvi arquivar o meme aqui, custa nada: Acesse o resto deste post »

Qual A Sua Arma Para O Apocalipse Zumbi?

19 de julho de 2015
acessar Qual A Sua Arma Para O Apocalipse Zumbi?

Num dia destes aí pra trás, a página do Facebook do nosso parceiro, o site Jogos de Zumbi, publicou um meme por lá que perguntava o quão lascado você estava, pois a arma que você vai usar no apocalipse zumbi seria última que ele usou ao jogar algum game…

O pessoal da Curtas do Doomguy, que não marca bobeira, foi lá e respondeu, mostrando qual a sua arma, a famosa BFG 9000 do Doom, aquela que atinge todos os inimigos da tela, infligindo uma grande quantidade de danos a eles. Ou seja, pode vir até dois apocalipses zumbis que não tem problema auehauheauheu

Veja como ficou lá:

Qual A Sua Arma Para O Apocalipse Zumbi

E você? Qual a sua arma pra esta calamidade dos mortos-vivos? Responda aqui no site ou comente lá, na publicação original!

Inscreva-se na nossa newsletter!