Script para turbinar o seu sistema de gravação de jogo.
Requerimentos:
Screenshot.dll colocada a disposição no demo e a download em separado.
Características
- Infinitos save slots, você pode escolher o numero máximo
- VocÊ pode usar uma imagem para o background (fundo) da cena
- Você pode escolher o nome do arquivo, e a pasta para guarda-los
- Escolha para mostrar apenas o que deseja mostrar
- Texto editável para mostrar as informações desejadas
- Inclui screenshot para cada jogo salvo, você pode escolher o tipo de imagem.
- Remove o texto se você não quer o nome do mapa (ex. tags para script especial)
- Escolha o mapa que você não quer mostrar o nome
- Inclui confirmação de salvamento antes de gravar encima do jogo antigo
- Controle de opacidade para os menus e para o fundo.
Screenshots
Como usar
Copie e cole o script acima do "principal" ou "main", na parte de add-on / Materials no seu VX. Depois copie a screenshot.dll a mesma pasta onde está o arquivo game.exe
Demo
Demo testado e traduzido e novamente testado. Não deu nenhum erro comigo.
O script foi testado, traduzido e testado novamente. não deu nenhum erro novamente.
Script
Pessoalmente, não gosto deste sistema de colar um script grande diretamente no post, mas ele está disponivel nos sabores DEMO e Arquivo de texto (encodação Unicode!).
Créditos:
Woratana, que gentilmente autorizou a tradução e distribuição de seu script. Forum RPG RPG Revolution, de onde saiu a versão original em inglês.
Thaiware RPG Maker Community, o grupo que apoia Woratana
RPG Maker Brasil, por se lembrar de dar os créditos a quem merece.
Observações da tradução:
Nada do script foi mexido, apenas mudei alguns termos do diálogo do script para português do Brasil, assim como os comentários. Se aparecer alguma mensagem em inglês no seu jogo, é que ela não corresponde a versão traduzida do RPG Maker VX.
Para fins de compatibilidade, eu inclui as dll's do RPG Maker americano para não causar bugs inesperados no momento de rodar a demo.
A versão da demo é a versão Inglesa traduzida. Basta copiar o script e a DLL nos lugares certos que não haverá problema.
Você chama o menu de gravação através do menu "salvar" na tela de status dos personagens.
A primeira Screenshot foi tirada da demo original, mas eu testei aqui e não vi problemas em rodar.
Nota importante:
Em alguns computadores com o sistema operacional diferente do XP (windows 98, Windows 2000, Windows ME e Windows Vista) o arquivo screenshot.dll pode não funcionar. Se alguém que não use o Windows XP puder rodar a demo e salvar, fechar o jogo e depois carregar o jogo salvo e dizer se deu ou não problema, eu ficaria grato. Valeu.
Obrigado. Eu traduzi na hora da folga do trabalho. O script é tão bonito que acho que vou adicionar no meu jogo. Ele parece ser 10! Gostei muito dele. :)
Poderia me dar mais informações? Você disse que não funcionou, mas eu gostaria de ter mais informações para saber o que deu errado. Se for um bug, eu aviso o autor (já que eu traduzi apenas os comentários).
1) Você colocou a screenshot.dll na mesma pasta que o game.exe ? (no caso de usar o script).
2) A imagem da área da screenshot ficou preta?
A menos que você tenha mexido no script, o nome do arquivo padrão é temp.png que fica no mesmo diretório do game.exe
3) O script aprensentou alguma mensagem de erro ou algum outro problema, fora este?
4) Qual versão do windows que você usa?
- Editado -
Eu li os tópicos sobre o Neo Save system, e parece que a DLL que é responsável pelo salvamento das screenshots funciona bem no XP, mas em algumas outras versões do windows não funciona, deixando um espaço em preto na área do screenshot.
Se você não estiver usando Windows XP, acho que encontrei o problema. O autor Woratana está providenciando (na medida do possivel, quando puder) uma dll mais compativel com outros windows, e assim que sair eu coloco aqui.
Se você ainda utiliza o XP, então eu precisaria de outras informações para localizar o problema no seu lado do micro.
Poderia ser mais especifico? Comparando o script traduzido que coloquei a disposição e a sua versão alterada, talvez você encontre o erro que causou o bug.
Outro detalhe... Ao reportar um bug, me diga a versão do seu windows e a do seu RPG Maker VX (se é em português, japonês ou em inglês). isto agiliza na hora de procurar bugs e apresentar o relatório de problemas ao autor. :)
#===============================================================
# ● [VX] ◦ Neo Save System with Unlimited save slots ◦ □
#--------------------------------------------------------------
# ◦ by Woratana - Tradução RPG Maker Brasil - Randal Br
# ◦ Thaiware RPG Maker Community
# ◦ Released on: 04/05/2008
# ◦ Version: 1.0 -
# Pegue mais informações desta tradução em www.rpgmakerbrasil.com
#--------------------------------------------------------------
# ◦ Creditos: - Andreas21 e Cybersam pelo Screenshot Script
# - RPG Revolution por hospedar o arquivo de DLL de screenshot.
#--------------------------------------------------------------
# ◦ Requirementos: screenshot.dll de Andreas21.
# You pode fazer o download do arquivo em:
# http://www.rpgrevolution.com/users/woratana/DLL_file/
# Alternativamente, pegue em http://www.rpgmakerbrasil.com
# Coloque na pasta de proejtos. (pasta onde está o arquivo Game.exe)
#--------------------------------------------------------------
# ◦ Caracteristicas:
# - Infinitos save slots, você pode escolher o numero máximo
# - VocÊ pode usar uma imagem para o background (fundo) da cena
# - Você pode escolher o nome do arquivo, e a pasta para guarda-los
# - Escolha para mostrar apenas o que deseja mostrar
# - Texto editável para mostrar as informações desejadas
# - Inclui screenshot para cada jogo salvo, você pode escolher o tipo de imagem.
# - Remove o texto se você não quer o nome do mapa (ex. tags para script especial)
# - Escolha o mapa que você não quer mostrar o nome
# - Inclui confirmação de salvamento antes de gravar encima do jogo antigo
#=================================================================
module Wora_NSS
#==========================================================================
# * START NEO SAVE SYSTEM - SETUP - Configuração
#--------------------------------------------------------------------------
NSS_WINDOW_OPACITY = 255 # Opacidade (Baixo 0 - 255 Alto)
# Você pode mudar para 0 no caso de usar uma imagem como fundo
NSS_IMAGE_BG = '' # Nome da imagem de fundo, tem que estar na pasta Picture.
# use '' para não ter nenhum fundo
NSS_IMAGE_BG_OPACITY = 255 # Opacity da imagem de fundo
MAX_SAVE_SLOT = 20 # Numero máximo de slots para gravação.
SLOT_NAME = 'Salve {id}'
# Nome do slot (Mostra o nome na lista de slots), use {id} para slot ID
SAVE_FILE_NAME = 'Saveslot{id}.rvdata'
# Nome do arquivo de gravação (save), você pode alterar o tipo de arquivo de .rvdata para outro
# use {id} para save slot ID
SAVE_PATH = 'Salve/' # Caminho para a pasta de gravação, ex. 'Save/' ou '' (da pasta do jogo)
SAVED_SLOT_ICON = 133 # Icone de Index para jogo salvo (gravado)
EMPTY_SLOT_ICON = 141 # Icone Index para slot vazio
IMAGE_FILETYPE = '.png' # Tipo de imagem para o screenshot
# '.bmp', ou '.jpg', ou '.png'
EMPTY_SLOT_TEXT = 'Vazio' # Texto para mostrar um slot vazio
DRAW_GOLD = true # Mostra a quantidade de dinheiro
DRAW_PLAYTIME = true # Mostra o tempo de jogo
DRAW_LOCATION = true # Mostra a localização
DRAW_FACE = true # Mostra a face do personagem
DRAW_LEVEL = true # Mostra o nivel do personagem
DRAW_NAME = true # Mostra o nome do personagem
PLAYTIME_TEXT = 'Tempo de jogo: '
GOLD_TEXT = 'GP: '
LOCATION_TEXT = 'Local: '
LV_TEXT = 'Level: '
MAP_NAME_TEXT_SUB = %w{}
# Texto que você quer remover do nome do mapa,
# ex. %w{[LN] [DA]} vai remover '[LN]' e '[DA]' do nome do mapa
MAP_NO_NAME_LIST = [] # ID do nome do mapa que não quer mostrar, ex [1,2,3]
MAP_NO_NAME_NAME = '???' # O que irá usar para chamar o seu mapa sem nome da lista
MAP_BORDER = Color.new(0,0,0,200) # Mapa (Screenshot) Borda colorida(R,G,B,Opacity)
FACE_BORDER = Color.new(0,0,0,200) # Borda colorida do rosto
## SAVE CONFIRMATION WINDOW ##
SFC_Text_Confirm = 'Substituir' # Texto para confirmar a gravação do jogo
SFC_Text_Cancel = 'Cancelar' # Texto para cancelar a gravação do jogo
SFC_Window_Width = 200 # tamanho da tela de confirmação
SFC_Window_X_Offset = 0 # Mover tela de confirmação horizontalmente
SFC_Window_Y_Offset = 0 # Mover tela de confirmação verticalmente
#----------------------------------------------------------------------
# END NEO SAVE SYSTEM - SETUP - NÃO MEXA APARTIR DAQUI, SE NÃO SOUBER!
#=========================================================================
#-------------------------------------------------------------
# Screenshot V2 by Andreas21 and Cybersam
#-------------------------------------------------------------
@screen = Win32API.new 'screenshot', 'Screenshot', %w(l l l l p l l), ''
@readini = Win32API.new 'kernel32', 'GetPrivateProfileStringA', %w(p p p p l p), 'l'
@findwindow = Win32API.new 'user32', 'FindWindowA', %w(p p), 'l'
module_function
def self.shot(file_name)
case IMAGE_FILETYPE
when '.bmp'; typid = 0
when '.jpg'; typid = 1
when '.png'; typid = 2
end
# Get Screenshot - Pegar screenshot
filename = file_name + IMAGE_FILETYPE
@screen.call(0, 0, Graphics.width, Graphics.height, filename, self.handel,
typid)
end
def self.handel
game_name = "\0" * 256
@readini.call('Game','Title','',game_name,255,".\\Game.ini")
game_name.delete!("\0")
return @findwindow.call('RGSS Player',game_name)
end
end
class Scene_File < Scene_Base
include Wora_NSS
attr_reader :window_slotdetail
#--------------------------------------------------------------------------
# * Start processing - Inicar Processo
#--------------------------------------------------------------------------
def start
super
create_menu_background
if NSS_IMAGE_BG != ''
@bg = Sprite.new
@bg.bitmap = Cache.picture(NSS_IMAGE_BG)
@bg.opacity = NSS_IMAGE_BG_OPACITY
end
@help_window = Window_Help.new
command = []
(1..MAX_SAVE_SLOT).each do |i|
command << SLOT_NAME.clone.gsub!(/\{ID\}/i) { i.to_s }
end
@window_slotdetail = Window_NSS_SlotDetail.new
@window_slotlist = Window_SlotList.new(160, command)
@window_slotlist.y = @help_window.height
@window_slotlist.height = Graphics.height - @help_window.height
@help_window.opacity = NSS_WINDOW_OPACITY
@window_slotdetail.opacity = @window_slotlist.opacity = NSS_WINDOW_OPACITY
# Create Folder for Save file - Criar pasta para jogo salvo
if SAVE_PATH != ''
Dir.mkdir(SAVE_PATH) if !FileTest.directory?(SAVE_PATH)
end
if @saving
@index = $game_temp.last_file_index
@help_window.set_text(Vocab::SaveMessage)
else
@index = self.latest_file_index
@help_window.set_text(Vocab::LoadMessage)
(1..MAX_SAVE_SLOT).each do |i|
@window_slotlist.draw_item(i-1, false) if !@window_slotdetail.file_exist?(i)
end
end
@window_slotlist.index = @index
# Draw Information - Mostrar Informação
@last_slot_index = @window_slotlist.index
@window_slotdetail.draw_data(@last_slot_index + 1)
end
#--------------------------------------------------------------------------
# * Termination Processing
#--------------------------------------------------------------------------
def terminate
super
dispose_menu_background
unless @bg.nil?
@bg.bitmap.dispose
@bg.dispose
end
@window_slotlist.dispose
@window_slotdetail.dispose
@help_window.dispose
end
#--------------------------------------------------------------------------
# * Frame Update - Atualziação de Frame
#--------------------------------------------------------------------------
def update
super
if !@confirm_window.nil?
@confirm_window.update
if Input.trigger?(Input::C)
if @confirm_window.index == 0
determine_savefile
@confirm_window.dispose
@confirm_window = nil
else
Sound.play_cancel
@confirm_window.dispose
@confirm_window = nil
end
elsif Input.trigger?(Input::B)
Sound.play_cancel
@confirm_window.dispose
@confirm_window = nil
end
else
update_menu_background
@window_slotlist.update
if @window_slotlist.index != @last_slot_index
@last_slot_index = @window_slotlist.index
@window_slotdetail.draw_data(@last_slot_index + 1)
end
@help_window.update
update_savefile_selection
end
end
#--------------------------------------------------------------------------
# * Update Save File Selection - Atualizar seleção de jogo gravado
#--------------------------------------------------------------------------
def update_savefile_selection
if Input.trigger?(Input::C)
if @saving and @window_slotdetail.file_exist?(@last_slot_index + 1)
Sound.play_decision
text1 = SFC_Text_Confirm
text2 = SFC_Text_Cancel
@confirm_window = Window_Command.new(SFC_Window_Width,[text1,text2])
@confirm_window.x = ((544 - @confirm_window.width) / 2) + SFC_Window_X_Offset
@confirm_window.y = ((416 - @confirm_window.height) / 2) + SFC_Window_Y_Offset
else
determine_savefile
end
elsif Input.trigger?(Input::B)
Sound.play_cancel
return_scene
end
end
#--------------------------------------------------------------------------
# * Execute Save - Executar gravação de jogo
#--------------------------------------------------------------------------
def do_save
File.rename(SAVE_PATH + 'temp' + IMAGE_FILETYPE,
make_filename(@last_slot_index).gsub(/\..*$/){ '_ss' } + IMAGE_FILETYPE)
file = File.open(make_filename(@last_slot_index), "wb")
write_save_data(file)
file.close
$scene = Scene_Map.new
end
#--------------------------------------------------------------------------
# * Execute Load - Executar carregamento de jogo salvo
#--------------------------------------------------------------------------
def do_load
file = File.open(make_filename(@last_slot_index), "rb")
read_save_data(file)
file.close
$scene = Scene_Map.new
RPG::BGM.fade(1500)
Graphics.fadeout(60)
Graphics.wait(40)
@last_bgm.play
@last_bgs.play
end
#--------------------------------------------------------------------------
# * Confirm Save File - Confirmar Gravação
#--------------------------------------------------------------------------
def determine_savefile
if @saving
Sound.play_save
do_save
else
if @window_slotdetail.file_exist?(@last_slot_index + 1)
Sound.play_load
do_load
else
Sound.play_buzzer
return
end
end
$game_temp.last_file_index = @last_slot_index
end
#--------------------------------------------------------------------------
# * Create Filename - Criar arquivo
# file_index : save file index (0-3) - Index de jogo salvo (0-3)
#--------------------------------------------------------------------------
def make_filename(file_index)
return SAVE_PATH + SAVE_FILE_NAME.gsub(/\{ID\}/i) { (file_index + 1).to_s }
end
#--------------------------------------------------------------------------
# * Select File With Newest Timestamp - Selecione arquivo para nova faixa de tempo
#--------------------------------------------------------------------------
def latest_file_index
latest_index = 0
latest_time = Time.at(0)
(1..MAX_SAVE_SLOT).each do |i|
file_name = make_filename(i - 1)
next if !@window_slotdetail.file_exist?(i)
file_time = File.mtime(file_name)
if file_time > latest_time
latest_time = file_time
latest_index = i - 1
end
end
return latest_index
end
end
class Window_SlotList < Window_Command
#--------------------------------------------------------------------------
# * Mostrar Item
#--------------------------------------------------------------------------
def draw_item(index, enabled = true)
rect = item_rect(index)
rect.x += 4
rect.width -= 8
icon_index = 0
self.contents.clear_rect(rect)
if $scene.window_slotdetail.file_exist?(index + 1)
icon_index = Wora_NSS::SAVED_SLOT_ICON
else
icon_index = Wora_NSS::EMPTY_SLOT_ICON
end
if !icon_index.nil?
rect.x -= 4
draw_icon(icon_index, rect.x, rect.y, enabled) # Draw Icon
rect.x += 26
rect.width -= 20
end
self.contents.clear_rect(rect)
self.contents.font.color = normal_color
self.contents.font.color.alpha = enabled ? 255 : 128
self.contents.draw_text(rect, @commands[index])
end
def cursor_down(wrap = false)
if @index < @item_max - 1 or wrap
@index = (@index + 1) % @item_max
end
end
def cursor_up(wrap = false)
if @index > 0 or wrap
@index = (@index - 1 + @item_max) % @item_max
end
end
end
class Window_NSS_SlotDetail < Window_Base
include Wora_NSS
def initialize
super(160, 56, 384, 360)
@data = []
@exist_list = []
@bitmap_list = {}
@map_name = []
end
def draw_data(slot_id)
contents.clear # 352, 328
load_save_data(slot_id) if @data[slot_id].nil?
if @exist_list[slot_id]
save_data = @data[slot_id]
# Mostrar Screenshot~
contents.fill_rect(0,30,352,160, MAP_BORDER)
if save_data['ss']
bitmap = get_bitmap(save_data['ss_path'])
rect = Rect.new((Graphics.width-348)/2,(Graphics.height-156)/2,348,156)
contents.blt(2,32,bitmap,rect)
end
if DRAW_GOLD
# Mostrar Ouro (gold)
gold_textsize = contents.text_size(save_data['gamepar'].gold).width
goldt_textsize = contents.text_size(GOLD_TEXT).width
contents.font.color = system_color
contents.draw_text(0, 0, goldt_textsize, WLH, GOLD_TEXT)
contents.draw_text(goldt_textsize + gold_textsize,0,200,WLH, Vocab::gold)
contents.font.color = normal_color
contents.draw_text(goldt_textsize, 0, gold_textsize, WLH, save_data['gamepar'].gold)
end
if DRAW_PLAYTIME
# Mostrar Tempo de jogo
hour = save_data['total_sec'] / 60 / 60
min = save_data['total_sec'] / 60 % 60
sec = save_data['total_sec'] % 60
time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
pt_textsize = contents.text_size(PLAYTIME_TEXT).width
ts_textsize = contents.text_size(time_string).width
contents.font.color = system_color
contents.draw_text(contents.width - ts_textsize - pt_textsize, 0,
pt_textsize, WLH, PLAYTIME_TEXT)
contents.font.color = normal_color
contents.draw_text(0, 0, contents.width, WLH, time_string, 2)
end
if DRAW_LOCATION
# Mostrar Localização
lc_textsize = contents.text_size(LOCATION_TEXT).width
mn_textsize = contents.text_size(save_data['map_name']).width
contents.font.color = system_color
contents.draw_text(0, 190, contents.width,
WLH, LOCATION_TEXT)
contents.font.color = normal_color
contents.draw_text(lc_textsize, 190, contents.width, WLH,
save_data['map_name'])
end
# Mostrar FACE & Nivel & Nome
save_data['gamepar'].members.each_index do |i|
actor = save_data['gamepar'].members[i]
face_x_base = (i*80) + (i*8)
face_y_base = 216
lvn_y_plus = 10
lv_textsize = contents.text_size(actor.level).width
lvt_textsize = contents.text_size(LV_TEXT).width
if DRAW_FACE
# Draw Face
contents.fill_rect(face_x_base, face_y_base, 84, 84, FACE_BORDER)
draw_face(actor.face_name, actor.face_index, face_x_base + 2,
face_y_base + 2, 80)
end
if DRAW_LEVEL
# Draw Level
contents.font.color = system_color
contents.draw_text(face_x_base + 2 + 80 - lv_textsize - lvt_textsize,
face_y_base + 2 + 80 - WLH + lvn_y_plus, lvt_textsize, WLH, LV_TEXT)
contents.font.color = normal_color
contents.draw_text(face_x_base + 2 + 80 - lv_textsize,
face_y_base + 2 + 80 - WLH + lvn_y_plus, lv_textsize, WLH, actor.level)
end
if DRAW_NAME
# Draw Name
contents.draw_text(face_x_base, face_y_base + 2 + 80 + lvn_y_plus - 6, 84,
WLH, actor.name, 1)
end
end
else
contents.draw_text(0,0, contents.width, contents.height - WLH, EMPTY_SLOT_TEXT, 1)
end
end
def load_save_data(slot_id)
file_name = make_filename(slot_id)
if file_exist?(slot_id) or FileTest.exist?(file_name)
@exist_list[slot_id] = true
@data[slot_id] = {}
# Start load data
file = File.open(file_name, "r")
@data[slot_id]['time'] = file.mtime
@data[slot_id]['char'] = Marshal.load(file)
@data[slot_id]['frame'] = Marshal.load(file)
@data[slot_id]['last_bgm'] = Marshal.load(file)
@data[slot_id]['last_bgs'] = Marshal.load(file)
@data[slot_id]['gamesys'] = Marshal.load(file)
@data[slot_id]['gamemes'] = Marshal.load(file)
@data[slot_id]['gameswi'] = Marshal.load(file)
@data[slot_id]['gamevar'] = Marshal.load(file)
@data[slot_id]['gameselfvar'] = Marshal.load(file)
@data[slot_id]['gameactor'] = Marshal.load(file)
@data[slot_id]['gamepar'] = Marshal.load(file)
@data[slot_id]['gametro'] = Marshal.load(file)
@data[slot_id]['gamemap'] = Marshal.load(file)
@data[slot_id]['total_sec'] = @data[slot_id]['frame'] / Graphics.frame_rate
@data[slot_id]['ss_path'] = file_name.gsub(/\..*$/){'_ss'} + IMAGE_FILETYPE
@data[slot_id]['ss'] = FileTest.exist?(@data[slot_id]['ss_path'])
@data[slot_id]['map_name'] = get_mapname(@data[slot_id]['gamemap'].map_id)
file.close
else
@exist_list[slot_id] = false
@data[slot_id] = -1
end
end
def make_filename(file_index)
return SAVE_PATH + SAVE_FILE_NAME.gsub(/\{ID\}/i) { (file_index).to_s }
end
def file_exist?(slot_id)
return @exist_list[slot_id] if !@exist_list[slot_id].nil?
@exist_list[slot_id] = FileTest.exist?(make_filename(slot_id))
return @exist_list[slot_id]
end
def get_mapname(map_id)
if @map_data.nil?
@map_data = load_data("Data/MapInfos.rvdata")
end
if @map_name[map_id].nil?
if MAP_NO_NAME_LIST.include?(map_id)
@map_name[map_id] = MAP_NO_NAME_NAME
else
@map_name[map_id] = @map_data[map_id].name
MAP_NAME_TEXT_SUB.each_index do |i|
@map_name[map_id].sub!(MAP_NAME_TEXT_SUB[i], '')
end
end
end
return @map_name[map_id]
end
def get_bitmap(path)
if !@bitmap_list.include?(path)
@bitmap_list[path] = Bitmap.new(path)
end
return @bitmap_list[path]
end
def dispose
@bitmap_list.each {|i| i[1].dispose }
super
end
end
class Scene_Title < Scene_Base
def check_continue
file_name = Wora_NSS::SAVE_PATH + Wora_NSS::SAVE_FILE_NAME.gsub(/\{ID\}/i) { '*' }
@continue_enabled = (Dir.glob(file_name).size > 0)
end
end
class Scene_Map < Scene_Base
alias wora_nss_scemap_ter terminate
def terminate
Wora_NSS.shot(Wora_NSS::SAVE_PATH + 'temp')
wora_nss_scemap_ter
end
end
#======================================================================
# END - NEO SAVE SYSTEM by Woratana
# Traduzido para português por Randal Br - Rpg Make Brasil
#======================================================================
Só mexi nas configurações principais,
xD
Não sei qual é o erro,
meu RPG Maker é portugues,
mais foi baixado aqui no fórum,
pra mim ver o script,
tive de copiar os arquivos para um novo projeto, mais foi como estava na pasta real,
pois ocorreu um erro dizendo que a versão usada no jogo era antiga, eu fiz como a "Ajuda" falo mais num deu nada.
Vou ler com calma depois os scripts e comparar, mas se mexeu apenas nas configurações principais como opacidade ou fundo, acho que nã oera para ter dado errado.
Sobre ser o "erro da versão antiga", acho que o bug pode ser causado pela incompatibilidade entra as versões do demo, a do meu RMVX em inglês e a sua do RMVX em português. Eu envio sempre as dll's extras com o demo para ajudar neste rolo da compatibilidade.
Eu acredito que você está usando a RMVX 1.01 em português. Acho que a 1.02 já está disponivel. Atualize-se se for este o caso.
Para evitar que o erro se repita, coloque estas dll's no diretório do game.exe do seu jogo e do seu RMVX se o seu programa é 1.01... Talvez funcione.
Estou aguardando que os outros usuários do fórum peguem a demo e testem. Se o erro se repetir, então estará claro que o erro é na minha tradução ou causado pelo meu VX gringo.