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.
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
Postado em: Programação XP
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 […]
Postado em: Jogos Online
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 […]
Postado em: Dicas e soluções, Vídeos
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.
#============================================================================== # ** 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
Postado em: Programação XP
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 »
Postado em: Downloads, Ferramentas Makers
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 […]
Postado em: Jogos Online
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.
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
Postado em: Programação XP
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 »
Postado em: RPG
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 »
Postado em: Dicas e soluções, Humor, Vídeos
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á:
E você? Qual a sua arma pra esta calamidade dos mortos-vivos? Responda aqui no site ou comente lá, na publicação original!
Postado em: Humor