O Guia Rápido dos DesESpErADoS!
Quem nunca se descabelou com um erro do RMXP? Você chega ao desespero, com a singela vontade de transformar o PC em brasas... mas, bem, muitas vezes há soluções! E o bom é que muitas delas são simples: alguma força oculta no Cosmos gosta de fazer com que você se sinta o mais babaca possível ao descobrir que para corrigir aquele monsterbug do XP basta usar três cliques do mouse...
Mas isto é para todos, amigo! E aqui vai o Guia Rápido de Consultas para você que está nessa situação...
- "Oh! Meu RMXP não está abrindo!"
Se ele mostrar uma mensagem de erro a respeito da Resolução gráfica, clique com o botão direito do mouse em qualquer lugar da sua Área de Trabalho e selecione Propriedades. Lá, vá para a aba "Configurações" e mude a "Resolução da Tela" para 1024x768, ou superior. Resolvido.
Se não mostrar mensagem nenhuma, reinstale o RMXP e tente abri-lo de novo.
Se ainda assim não funcionar, baixe-o novamente e reinstale.
Não funciona ainda? Chore.
- "Jesus! O botão 'Testar Jogo' não funciona mais!"
Este é um pequeno probleminha. Na pasta do seu jogo, ache o arquivo "Game.ini". Abra-o e então copie o nome do arquivo DLL, que está na mesma pasta (geralmente tem um nome semelhante a "RGSS102J.dll") e cole em:
"Library= (nome do arquivo)"
Não resolveu? Reinstale o RMXP e tente de novo.
- "Macacos me mordam! Os sons não estão tocando!"
Hum... as caixas de som ou o fone estão funcionando? ...O volume está audível?
Pode ser um problema no programa, reinstale-o e veja se dá certo.
Se continuar na mesma, crie um novo projeto e veja se nesse eles funcionam. Se sim, deve ser algum script novo que você botou no seu projeto... retire o(s) mais recente(s) e olhe (escute?) se agora funciona. Se não, talvez seja problema com o seu PC. Baixe um pacote recente de codecs de áudio como o K-Lite Mega Codec Pack, o XP Codec Pack, ou o Vista Codec Package e veja se eles ajudam. Se ainda não, entre no site do fabricante da sua Placa de Som e baixe os drivers mais recentes.
- "Essa pimbóia de RPG Maker XP é difícil demais! Alguém pode me dar uma ajudinha?!"
Todos aqui fazem o que podem para te ajudar, é o intuito do fórum. Sempre que tiver uma dúvida, poste na seção correspondente e alguém poderá te ajudar. Se você é iniciante, apertar F1 dentro do programa e ler o arquivo de ajuda é uma boa.
-"Mas que coisa! Eu coloco resources novos na pasta do meu jogo, mas quando vou usar, eles ficam todos com o fundo aparecendo!!"
Isso acontece porque você está fazendo errado, Zé.
O RM tem uma função chamada Resource Manager (Organizador de Recursos). Aperte F10 dentro do programa e a janelinha vai aparecer.
À esquerda, escolha a pasta correspondente ao que você deseja importar (char, tileset, etc). Clique em Importar e escolha o arquivo. Na janela que se abre, escolha, com os botões esquerdo e direito do mouse, as cores transparente e translúcida do resource. Transparente é aquela que não deve ser mostrada, como o fundo do char. Translúcida é aquela que aparecerá com uma baixa opacidade, e é útil para sombras, vidros e asas de fada, por exemplo.
- "Baraaalho! Acabou a energia em casa quando eu estava fazendo meu projeto; agora eu tento abrir, e fala que está corrompidoooo!!!! "
É nessa hora que sua mão fica gelada, sua garganta seca e você acha que já não tem pernas. "Meeew! Agora... fedeu!".
Por isso que é bom regularmente fazer backups do seu projeto, seja em DVDs, memórias móveis ou copiando sempre para uma outra pasta, mesmo...
Mas caso você não tenha feito isso (e a maioria não faz), dá pra tentar recuperar algumas coisas... os sentidos das pernas, inclusive.
Crie um projeto em branco. Abra a pasta do projeto "queimado" e a do novo. Passe todos os arquivos que estão na pasta "Data" do queimado para a pasta "Data" do novo, de um por um. A cada arquivo que você passar, abra o projeto novo e veja se ele está dando erro. Exemplo: Passe o arquivo "Classes", abra o projeto, não deu erro, feche. Passe o "Skills", abra o projeto, não deu erro, feche. Passe o arquivo "Scripts", abra o projeto, deu erro. Ai, ui! Então você sabe que este está corrompido.
Delete-o do projeto queimado. Coloque um arquivo igual ("Scripts") ali, de um novo projeto. Abra o queimado. O erro parou? Bom pra você, mas perdeu os scripts que tinha colocado. O erro continua? Mais arquivos se corromperam, repita o processo até achar todos os que estão defeituosos.
Obs.: Esse erro também costuma aparecer na forma de "Formato de Arquivo Inesperado".
- "Pelos bigodes da tia Rômula! Terminei meu jogo, passei pros meus amigos mas não funciona no computador deles!!!!"
Para que funcione no computador deles, eles também devem instalar o RTP. Para que não precisem fazer isso, você também pode inserir os arquivos que usou do RTP nas respectivas pastas do seu jogo. A windowskin "001-blue01" deve ser movida para a pasta Windowskin do seu projeto, por exemplo.
Feito isso, entre no seu projeto e, no menu do topo, entre em "Jogo/Selecionar RTP..." e deixe todos os campos com "Nada". Este é um método que pode ou não funcionar, pois o RMXP pode recolocar o RTP ali de novo como padrão. Neste caso, tente outro meio: Entre no arquivo "Game" da pasta do seu projeto pelo Bloco de Notas. Na linha que diz "RTP1 = Standard", apague o "Standard" e deixe apenas "RTP=" (sem as aspas). Salve e estarás salvo. Isto funciona sempre.
- "Abro o jogo pra testar, mas aparece que ocorreu um erro no script tal... o que eu faço?"
Feche o teste do jogo e imediatamente abra o editor de scripts. O cursor estará sobre a linha que deu erro.
O erro varia de script para script... pode ser um erro de sintaxe ou incompatibilidade entre dois ou mais scripts... O melhor é você postar o problema aqui no fórum, na seção de Scripts RGSS. Poste o script e a mensagem de erro, se possível, indicando a linha. Vamos todos tentar te ajudar.
- "...O que mais fiz no meu projeto foi copiar e colar scripts prontos... agora estou com Lesão por Esforço Repetitivo!"
Ô preguiça... ao invés de copiar todos os scripts que você vê pela frente, porque não tenta criar os seus próprios? Não é tão difícil assim. Há excelentes aulas de scripts por aí, como por exemplo as que você encontra aqui. Basta estudar um pouco para aprender a inovar! E no caso da lesão, consulte um médico. Da próxima, coma mais banana, ela tem potássio e ajuda a evitar cãibras e lesões... ;D
- "Que inferno!! Meu jogo está cheio de lags! O que faço pra esta bomba melhorar?"
Você pode reduzir os lags diminuindo o uso de scritps, o número de eventos nos mapas e eventos comuns, ou pode até mesmo usar um script "anti-lag", como este, melhorado por João Neto
#=============================================================================== # ** AntiLag Script #------------------------------------------------------------------------------- # f0tz!baerchen # 0.71 # 06.01.2007 #------------------------------------------------------------------------------- # JoaoNeto # 0.90 # 28.08.2007 #------------------------------------------------------------------------------- # Credits/Créditos: # Chaosg1 (for testing ;) ) # NearFantastica (for the Event AntiLag I used and improved) # JoaoNeto - Correção da Redundancia de atualização #------------------------------------------------------------------------------- #=============================================================================== #=============================================================================== # Class for Antilag Settings #=============================================================================== class Antilag_Settings attr_accessor :event attr_accessor :max_cpu_utilization attr_accessor :cpu_tolerance #----------------------------------------------------------------------------- # initializes default settings #----------------------------------------------------------------------------- def initialize @event = true @high_priority = true @max_cpu_utilization = 100 @cpu_tolerance = 20 @SetPriorityClass = Win32API.new('kernel32', 'SetPriorityClass', ['p', 'i'], 'i') @GetProcessTimes = Win32API.new('kernel32', 'GetProcessTimes', ['i','p','p','p','p'], 'i') end #----------------------------------------------------------------------------- # turns high priority on/off #----------------------------------------------------------------------------- def high_priority=(value) @high_priority = value if @high_priority @SetPriorityClass.call(-1, 0x00000080) # High Priority else @SetPriorityClass.call(-1, 0x00000020) # Normal Priority end end #----------------------------------------------------------------------------- # returns the current CPU Utilization #----------------------------------------------------------------------------- def get_cpu_utilization # uses API Call to get the Kernel and User Time creation_time = '0' * 10 exit_time = '0' * 10 kernel_time = '0' * 10 user_time = '0' * 10 @GetProcessTimes.call(-1, creation_time, exit_time, kernel_time, user_time) # converts times into integer (in 100ns) kernel_time = kernel_time.unpack('l2') user_time = user_time.unpack('l2') kernel_time = kernel_time[0] + kernel_time[1] user_time = user_time[0] + user_time[1] # takes differences to calculate cpu utilization if @old_time != nil timer_difference = Time.new - @old_timer time_difference = kernel_time + user_time - @old_time result = time_difference / timer_difference / 100000 else result = $antilag.max_cpu_utilization end # saves values (to calculate the differences, s.a.) @old_timer = Time.new @old_time = kernel_time + user_time return result end end $antilag = Antilag_Settings.new #=============================================================================== # Scene_Map class #=============================================================================== class Scene_Map #----------------------------------------------------------------------------- # update method, smooth antilag has been added #----------------------------------------------------------------------------- alias f0tzis_anti_lag_scene_map_update update def update f0tzis_anti_lag_scene_map_update if Graphics.frame_count % 20 == 0 and $antilag.max_cpu_utilization <= 100 # calculates difference between max utilization and current utilization abs = $antilag.max_cpu_utilization - $antilag.get_cpu_utilization # changes Frame Rate if difference is bigger than the tolerance if abs.abs >= $antilag.max_cpu_utilization * $antilag.cpu_tolerance/100.0 Graphics.frame_rate = [[10, Graphics.frame_rate + abs / 2].max, 40].min end end end end #============================================================================== # Game_Event Class #=============================================================================== class Game_Event #----------------------------------------------------------------------------- # for AntiLag, decides, if an event is on the screen or not. #----------------------------------------------------------------------------- def in_range? # returns true if $event_antilag is false or the event is an # Autostart/Parallel Process event or it has an empty # comment in the first line if not $antilag.event or (@trigger == 3 or @trigger == 4 or (@list != nil and @list[0].code == 108 and @list[0].parameters == [''])) return true end screne_x = $game_map.display_x screne_x -= 256 screne_y = $game_map.display_y screne_y -= 256 screne_width = $game_map.display_x screne_width += 2816 screne_height = $game_map.display_y screne_height += 2176 return false if @real_x <= screne_x return false if @real_x >= screne_width return false if @real_y <= screne_y return false if @real_y >= screne_height return true end #----------------------------------------------------------------------------- # update method #----------------------------------------------------------------------------- alias f0tzis_anti_lag_game_event_update update def update return if not self.in_range? f0tzis_anti_lag_game_event_update end end #=============================================================================== # Sprite_Character Class #=============================================================================== class Sprite_Character < RPG::Sprite #----------------------------------------------------------------------------- # update method, parameters added for Loop_Map, rebuild for 8dirs #----------------------------------------------------------------------------- alias f0tzis_anti_lag_sprite_char_update update def update return if @character.is_a?(Game_Event) and not @character.in_range? f0tzis_anti_lag_sprite_char_update end end #=============================================================================== # Settings #=============================================================================== $antilag.max_cpu_utilization = 70 # the maximum CPU utilization, the script # try to stay under this value during changing # changing the frame rate. The lower this # value the higher will be the lag reduction # (and the smoothness, too), a value > 100 # will disable this feature completely $antilag.cpu_tolerance = 20 # this value tells the script how many % of # the CPU utilization change should be ignored # If you change it too a higher value you, # your Frame Rate will be more constant but # smaller lags will be ignored. $antilag.high_priority = true # set this to true if you want the game to run # on high priority $antilag.event = true # set this to true to enable normal anti-lag #=============================================================================== # Game_Map Class #=============================================================================== class Game_Map def update # Atualizar o mapa se necessário if $game_map.need_refresh refresh end # Se estiver ocorrendo o scroll if @scroll_rest > 0 # Mudar da velocidade de scroll para as coordenadas de distância do mapa distance = 2 ** @scroll_speed # Executar scroll case @scroll_direction when 2 # Baixo scroll_down(distance) when 4 # Esquerda scroll_left(distance) when 6 # Direita scroll_right(distance) when 8 # Cima scroll_up(distance) end # Subtrair a distância do scroll @scroll_rest -= distance end # Atualizar Evento do mapa for event in @events.values if in_range?(event) or event.trigger == 3 or event.trigger == 4 event.update end end # Atualizar Evento Comum do mapa for common_event in @common_events.values common_event.update end # Controlar scroll da Névoa @fog_ox -= @fog_sx / 8.0 @fog_oy -= @fog_sy / 8.0 # Controlar a mudança de cor de Névoa if @fog_tone_duration >= 1 d = @fog_tone_duration target = @fog_tone_target @fog_tone.red = (@fog_tone.red * (d - 1) + target.red) / d @fog_tone.green = (@fog_tone.green * (d - 1) + target.green) / d @fog_tone.blue = (@fog_tone.blue * (d - 1) + target.blue) / d @fog_tone.gray = (@fog_tone.gray * (d - 1) + target.gray) / d @fog_tone_duration -= 1 end # Controlar a mudança de nível de opacidade de Névoa if @fog_opacity_duration >= 1 d = @fog_opacity_duration @fog_opacity = (@fog_opacity * (d - 1) + @fog_opacity_target) / d @fog_opacity_duration -= 1 end end def in_range?(object) diff_x = ($game_map.display_x - object.real_x).abs # absolute value diff_y = ($game_map.display_x - object.real_x).abs # absolute value width = 128 * 24 # size * tiles height = 128 * 19 # size * tiles return !((diff_x > width) or (diff_y > height)) end end #=============================================================================== # Spriteset_Map Class #=============================================================================== class Spriteset_Map def update # Se o Panorama for diferente do atual if @panorama_name != $game_map.panorama_name or @panorama_hue != $game_map.panorama_hue @panorama_name = $game_map.panorama_name @panorama_hue = $game_map.panorama_hue if @panorama.bitmap != nil @panorama.bitmap.dispose @panorama.bitmap = nil end if @panorama_name != "" @panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue) end Graphics.frame_reset end # Se a Névoa for diferente da atual if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue @fog_name = $game_map.fog_name @fog_hue = $game_map.fog_hue if @fog.bitmap != nil @fog.bitmap.dispose @fog.bitmap = nil end if @fog_name != "" @fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue) end Graphics.frame_reset end # Atualizar o Tilemap @tilemap.ox = $game_map.display_x / 4 @tilemap.oy = $game_map.display_y / 4 @tilemap.update # Atualizar o plano do Panorama @panorama.ox = $game_map.display_x / 8 @panorama.oy = $game_map.display_y / 8 # Atualizar o plano da Névoa @fog.zoom_x = $game_map.fog_zoom / 100.0 @fog.zoom_y = $game_map.fog_zoom / 100.0 @fog.opacity = $game_map.fog_opacity @fog.blend_type = $game_map.fog_blend_type @fog.ox = $game_map.display_x / 4 + $game_map.fog_ox @fog.oy = $game_map.display_y / 4 + $game_map.fog_oy @fog.tone = $game_map.fog_tone # Atualizar os sprites dos Heróis for sprite in @character_sprites if in_range?(sprite.character) sprite.update end end # Atualizar o Clima @weather.type = $game_screen.weather_type @weather.max = $game_screen.weather_max @weather.ox = $game_map.display_x / 4 @weather.oy = $game_map.display_y / 4 @weather.update # Atualiza os sprites das Figuras for sprite in @picture_sprites sprite.update end # Atualiza o sprite do Temporizador @timer_sprite.update # Definir cor e tom do Tremor @viewport1.tone = $game_screen.tone @viewport1.ox = $game_screen.shake # Definir cor do Flash @viewport3.color = $game_screen.flash_color # Atualizar os pontos de vista @viewport1.update @viewport3.update end def in_range?(object) diff_x = ($game_player.real_x - object.real_x).abs # absolute value diff_y = ($game_player.real_y - object.real_y).abs # absolute value width = 128 * 24 # size * tiles height = 128 * 19 # size * tiles return !((diff_x > width) or (diff_y > height)) end end #=============================================================================== # Interpreter Class #=============================================================================== class Interpreter #----------------------------------------------------------------------------- # * Script #----------------------------------------------------------------------------- def command_355 # Set first line to script script = @list[@index].parameters[0] + "\n" # Loop loop do # If next event command is second line of script or after if @list[@index+1].code == 655 # Add second line or after to script script += @list[@index+1].parameters[0] + "\n" # If event command is not second line or after else # Abort loop break end # Advance index @index += 1 end # Evaluation result = eval(script) #--------------------------------------------------------------------------- # If return value is false # NEW: the last word of the code mustnt be false! #--------------------------------------------------------------------------- if result == false and script[script.length-6..script.length-2] != 'false' # End return false end # Continue return true end end |
Obs.: Este e alguns outros scripts anti-lag podem apresentar um erro quando se usa algum gráfico grande para um evento (e ele então é arrastado pela tela). Para que isto não aconteça, basta adicionar um "Comentário" em branco na primeira linha dos "Comandos do Evento".
- "Acesso inválido ao local de memória. - Dá esse erro aqui o tempo todo!"
Este é um erro comum. Mas não é por isso que você vai odiá-lo menos.
Tente resolvê-lo da seguinte forma:
Se for Windows XP: Extraia os arquivos do anexo DLLsXP (final do post) para a pasta "Windows\system32" do seu PC. Depois, vá na pasta do seu jogo e abra o arquivo de texto "Game.ini"; lá, onde diz Library=RGSS102J.dll você muda para Library=RGSS100J.dll e salva o arquivo.
Se for Windows Vista: Abra o auto-executável DLLVista que está anexo. Em "Reference", você coloca a pasta do seu projeto e dê ok. Agora, na pasta dele, procure o arquivo de texto "Game.ini" e, onde diz Library=RGSS102J.dll substitua por Library=RGSS103J.dll e tá feito.
- "Peeeeste, o RPG Maker vive pedindo um tal de Serial Number..."
Se pede, é porque você tem instalada uma versão diferente da que temos aqui para download.
Clique aqui para fazer o download da versão que disponibilizamos, que além de ser gratuita e não exigir Serial Number, foi traduzida para o português. ;)
Fiz este guia com base em várias perguntas de makers "desesperados", e vez ou outra ainda o atualizo com itens novos de importância. Pode ser de muita ajuda a qualquer um